BİL551 – YAPAY ZEKA Prolog: Listeler

Slides:



Advertisements
Benzer bir sunumlar
ERÜNAL SOSYAL BİLİMLER LİSESİ
Advertisements

Listeler.
Yığın ve Kuyruk.
BU KONUDA ÖĞRENECEKLERİMİZ
Ders İçeriği Bağlantılı Liste İki Yönlü Bağlantılı Liste
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Prolog1 M.Fatih Amasyalı
Prolog4 cut&fail db değişimi
Prolog3 M.Fatih Amasyalı Web :
VERİ TABANI YÖNETİMİ Ders 11: PL/SQL’e Giriş
İkili Ağaçlar İkili Arama Ağaçları
4 Kontrol Yapıları: 1.Bölüm.
Diziler Dizi, bellekte aynı isim altında toplanmış değişkenler kümesidir. Eğer ki aynı türden veriler grubunu bellekte tutmak gerekirse diziler kullanılır.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Bölüm 3 – Yapısal Programlama
YAPAY ZEKA ve UZMAN SİSTEMLER
T-SQL-2.Konu Akış Kontrolleri.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Diziler.
Yapısal Program Geliştirme – if, if-else
MySQL, SQL ve PHP Öğr.Gör.Şükrü KAYA.
OPERATÖRLER.
İNTERNET PROGRAMCILIĞI I BTP 207 Ders 9. Tek değişkende birden fazla bilgi tutulmak istendiğinde kullanılır. Kullanım şekli: var dizi_adı= new Array(eleman1,
MANTIKSAL OPERATÖRLER
ÇİZGELERİN GÖSTERİMİ Yılmaz KILIÇASLAN. Sunu Planı Bu derste, çizgelerin bilgisayarda gösterimine ilişkin iki standart yaklaşımı inceleyeceğiz.
Nesneye Yönelik Programlama
Dosya İşlemleri BİLGİSAYAR PROGRAMCILIĞI BÖLÜMÜ
Bölüm 2 – Kontrol Yapıları
1 pred1(X,Z):-parent(X,Z). pred1(X,Z):-parent(X,Y), pred1( Y, Z). parent(pam, bob). parent(pam, bob). parent(tom, bob). parent(tom, bob). parent(tom, liz).
İŞLEM TANIM: A boş olmayan bir küme olmak üzere,A×A nın bir R alt kümesinden A ya tanımlanan her fonksiyona, işlem denir.İşlemi tanımlarken,’’
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
Chapter 4: Making Decisions
Diziler Dizi, bellekte aynı isim altında toplanmış değişkenler kümesidir. Eğer ki aynı türden veriler grubunu bellekte tutmak gerekirse diziler kullanılır.
PROLOG PROGRAMLAMA DİLİNDE
DÜZENLİ GRAMERLER Yılmaz Kılıçaslan.
Ders İçeriği Liste Soyut veri yapısı (ADT)
KÜMELER.
Mantıksal Programlama-Prolog
KÜMELER.
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
KÜMELER ERDİNÇ BAŞAR.
KÜMELER.
BM-103 Programlamaya Giriş Güz 2012 (3. Sunu)
KUYRUK (QUEUE).
YAPAY ZEKA P ROLOG 3. Geriye İz Sürme Mekanizması sever(oktay, okuma). * sever(yavuz, bilgisayar). sever(orhan, tavla). sever(vedat, uyuma). sever(ismail,
Adım Adım Algoritma.
AVL(Adel’son-Vel’skiĭ and Landis) Ağacı AVL ağacı, iki alt ağacının yükseklikleri farkının en fazla 1 olabildiği dengeli ikili arama ağacıdır. AVL ağacında.
Sayısal Analiz / Uygulama
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BİL551 – YAPAY ZEKA Kümeleme
7. HAFTA.
Prolog ile Mantık Programlamaya Giriş
Fonksiyonlar ve Diziler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
STRING FONKSİYONLARI Dim ders As String
Bilgisayar Programlamasına ve Veri Analizine Giriş - IV
Prolog Programlama LİSTELER (LISTS).
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
C Sharp 9. hafta - dIZILER.
BİRLEŞİM VE ARAMA (UNIFICATION & SEARCH)
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Problem Çözme Yaklaşımları
Bilgisayar Programlamasına ve Veri Analizine Giriş
Bilgisayar Programlamasına ve Veri Analizine Giriş - VII
Bilgisayar Programlamasına ve Veri Analizine Giriş
YZM 2116 Veri Yapıları Yrd. Doç. Dr. Deniz KILINÇ
Bilgisayar Programlamasına ve Veri Analizine Giriş - VII
Bilgisayar Bilimi Döngüler.
Sunum transkripti:

BİL551 – YAPAY ZEKA Prolog: Listeler Dr. Mehmet Dikmen mdikmen@baskent.edu.tr

Listeler Liste: elemanlar dizisi Örnek: ann, tennis, tom, skiing Prolog’daki ifadesi: [ann, tennis, tom, skiing]

Listelerin gösterimi (1) Boş dizi: [ ] Her listenin sonunda bulunur Boş olmayan bir liste 2 öğeden oluşur: Head: liste’nin başı Tail: listenin geri kalanı [ann, tennis, tom, skiing] örneği için : Head : ann Tail : [tennis, tom, skiing]

Listelerin gösterimi (2) Head|Tail gösterimine örnekler Liste [Head|Tail] değerleri [a, b, c, d, e] Head = [a] Tail = [b, c, d, e] [book, table, pen] Head = [book] Tail = [table, pen] [a,b,[c,d]] Tail = [b,[c,d]] [clock] Head = [clock] Tail = [] [] No head no tail

Listelerin gösterimi (3) Head herhangi bir prolog objesi olabilir. Tail liste olmak zorunda. head ve tail özel bir gösterimle liste yapısı haline getirilirler: .(Head, Tail) Yukarıdaki gösterimdeki Tail yine bir listedir.

Listelerin gösterimi (4) İlk örnek aşağıdaki şekilde de yazılabilir: .(ann, .(tennis, .(tom, .(skiing, []))))

Listelerin gösterimi (5) Boş liste bütün listelerin sonunda vardır: [skiing] = .(skiing, []) Liste gösteriminde nokta ve parantezli ya da köşeli parantezli notasyon kullanılabilir. Arka planda listelerin işlenmesi ağaçlarla yapılır ancak programın çıkışında listeler köşeli parantezlerle gösterilir. ?- List1 = [a, b, c], List2 = .(a, .(b, .(c, []))). List1 = [a, b, c] List2 = [a, b, c]

Örnek sorgu ?- Hobbies1 = .(tennis, .(music, [])), Hobbies2 = [skiing, food], L = [ann, Hobbies1, tom, Hobbies2]. Çıktı: Hobbies1 = [tennis, music] Hobbies2 = [skiing, food] L = [ann, [tennis, music], tom, [skiing, food] ]

Listelerin gösterimi (6) Alternatif liste gösterimi: | kullanarak [a, b, c] = [ a | [b, c] ] = [ a, b | [c] ] = [ a, b, c | [] ]

Listenin elemanlarını ekrana yazma print_list([Head|Tail]):- write(Head), write(' '), print_list(Tail). ?- print_list([9,7,3]). 9 7 3 Yes ?- print_list([9,7,[3,6,8]]). 9 7 [3, 6, 8]

Listenin eleman sayısını bulma size([],0). size([H|T],N) :- size(T,N1), N is N1+1. ?- size([34,6,4,3],H). H = 4 ; No ?- size([34,6,[4,6,[2,1],3],3],H).

Çok yapılan bir hata Ters yazmak: size([],0). size([H|T],N) :- size(T,N1), N is N1+1. size([H|T],N) :- N is N1+1, size(T,N1). ?- size([2,4,5],H). ERROR: Arguments are not sufficiently instantiated

Örnek: Listenin elemanı mı? member( X, [X| _ ] ). member( X, [ _ |Tail] ) :- member( X, Tail ). ?- member(4,[6,4,8]). Yes ?- member([5,6],[6,[5,6],8]). ?- member(5,[6,[5,6],8]). No

Bir liste, bir başka listenin altkümesi midir? subset (X,L) doğrudur eğer X in tüm elemanları L’nin de elemanı ise. member(X,[X|_]). member(X,[_|R) :- member(X,R). subset([],_). subset([X|R],L) :- member(X,L), subset(R,L).

Listenin elemanlarının toplamı listetopla([X|[]],X). listetopla([H|T],R):- listetopla(T,G), R is H+G. ?- listetopla([10,2,4,4,7],G). G = 27 ; No

Liste sıralı mı? s([_]). s([X|[Y|T]]) :- s([Y|T]), X>Y. Alternatif:

Listenin ilk elemanını silmek removefirst([],[]). removefirst([Head|Tail],Tail). ?- removefirst([8],H). H = [] ; No ?- removefirst([8,7,5],H). H = [7, 5] ; ?- removefirst([[4,5],7,5],H). H = [7, 5] ; No ?- removefirst([],H). H = [] ;

Listenin ilk N elemanını silmek trim(N,L,L1) doğrudur eğer L1, L’nin ilk N elemanı silinmiş hali ise. trim(0,[],[]). trim(0,[H|T],[H|T]). trim(N,[_|T],L) :- N > 0, M is N - 1, trim(M,T,L). ?- trim(3,[1,4,5,6,7,8,9],U). U = [6, 7, 8, 9] ;

Listeden istenilen elemanı silmek del(X, [X|Tail], Tail). del(X, [Y|Tail], [Y|Tail1]) :- del(X, Tail, Tail1). ?- del(a,[1,a,3,7,8],H). H = [1, 3, 7, 8] ; No ?- del(a,[1,a,3,a,a],H). ? H = [1, 3, a, a] ; H = [1, a, 3, a] ;

Listeleri Yazdırmak listeyaz([]). listeyaz([X|Y]):- write(X), nl, listeyaz(Y). ?- listeyaz([2,4,5]). 2 4 5 Yes write('\n'),

Çeviri means(0,zero). means(1,one). means(2,two). … means(9,nine). ?- translate([1,2,3],H). H = [one, two, three] ; ?- translate(H,[zero,one,nine]). H = [0, 1, 9] ; means(0,zero). means(1,one). means(2,two). … means(9,nine). translate([],[]). translate([H1|T1],[H2|T2]) :- means(H1,H2), translate(T1,T2).

Yol Bulma A B C D E F H G ?- go(a,c,YOL). YOL = [a, e, f, c] ; Başlangıç link(g,h). link(g,d). link(e,d). link(h,f). link(e,f). link(a,e). link(a,b). link(b,f). link(b,c). link(f,c). Hedef D E F H G yollar ?- go(a,c,YOL). YOL = [a, e, f, c] ; YOL = [a, b, f, c] ; YOL = [a, b, c] ; No go(X,X,[X]). go(X,Y,[X|T]):- link(X,Z), go(Z,Y,T). 22

Yol Bulma A B C D E F H G Başlangıç link(g,h). link(g,d). link(e,d). link(h,f). link(e,f). link(a,e). link(a,b). link(b,f). link(b,c). link(f,c). link(f,e). link(e,b). Hedef D E F H G ?- go(a,c,G). G = [a, e, f, c] ; G = [a, e, f, e, f, c] ; G = [a, e, f, e, f, e, f, c] ; G = [a, e, f, e, f, e, f, e, f|...] ; … yollar go(X,X,[X]). go(X,Y,[X|T]):- link(X,Z), go(Z,Y,T). 23

Yol Bulma A B C D E F H G go(X,X,_,[X]). go(X,Y,Visited,[X|T]):- Başlangıç link(g,h). link(g,d). link(e,d). link(h,f). link(e,f). link(a,e). link(a,b). link(b,f). link(b,c). link(f,c). link(f,e). link(e,b). Hedef D E F H G ?- go(a,c,[],G). G = [a, e, f, c] ; G = [a, e, b, f, c] ; G = [a, e, b, c] ; G = [a, b, f, c] ; G = [a, b, c] ; No go(X,X,_,[X]). go(X,Y,Visited,[X|T]):- link(X,Z), not(member(Z,Visited)), go(Z,Y,[Z|Visited],T). 24

Backtracking Control Prolog’da: Örnek: if X < 3 then Y = 0 if 3 <= X and X < 6 then Y = 2 if 6 <= X then Y = 4 Prolog’da: f(X,0) :- X<3. f(X,2) :- 3=<X, X<6. f(X,4) :- 6=<X. “f(1,Y), Y<2.” sorgusu: Doğru  Ancak, 3 kural da (no bulana kadar) denenir. Halbuki ilk kural doğru ise diğerlerini kontrol etmeye gerek yok => if – else Çözüm: CUT (!) kullanmak

CUT Argüman almaz, her zaman true, backtracking’i durdurur Yeni çözüm: f(X,0) :- X<3, !. f(X,2) :- 3=<X, X<6, !. f(X,4) :- 6=<X. f(X,Y) sorgusu yapıldığında, sadece karşılık gelen kural denenir. “f(1,Y), Y<2.” sorgusu için sadece ilk kural denenir ve cevap Y=0 olur.

Örnek if X<3 then Y=0, otherwise if X<6 then Y=2, otherwise Y=4. Çözüm: f(X,0) :- X<3, !. f(X,2) :- X<6, !. f(X,4). CUT kullanmazsak: f(X,0) :- X<3. f(X,2) :- X<6. f(X,4). f(1,Y). > Y = 0; > Y = 2; > Y = 4; > no

MAX örneği max(X,Y,Max): Maximum of X and Y. max(X, Y, X) :- X >= Y. max(X, Y, Y) :- X < Y. Daha efektif çözüm (CUT kullanarak): max(X, Y, X) :- X >= Y, !. max(X, Y, Y).

Member ilişkisi member(X, [X | L]). member(X, [Y | L]) :- member(X, L). ?- member(X, [a,b,c]). X = a ; X = b ; X = c ; no member(X, [X | L]) :- !. Sadece 1 çözüm üretilir

FAIL Her zaman false ama backtracking’e devam ettirir Örnek: Ayşe yılan haricindeki tüm hayvanları sever. likes(ayse, X) :- yilan(X), !, fail; animal(X). “!, fail” yerine not da kullanılabilir: likes(ayse, X) :- not(yilan(X)).

if then else if P then Q else R Cevap: S :- P, !, Q. S :- R.

Kullanıcı ile Etkileşim Okunan bilginin sonunu ifade eder. kup:- read(X), islem(X). islem(bit):-!. islem(N):- C is N*N*N, write(C), nl, kup. ?- kup. |: 4. 64 |: 7. 343 |: 1. 1 |: bit. Yes Arama işlemini durdurur.

Gerçekler VT’nı değiştirmek ?- sehir(istanbul). ERROR: Undefined procedure: sehir/1 ?- assert(sehir(istanbul)). Yes ?- sehir(N). N = istanbul ; No ?- retract(sehir(X)). X = istanbul ;

VT’na kural eklemek ?- assert(canli(X):-hayvan(X)). X = _G350 ; No ?- assert(hayvan(zebra)). Yes ?- canli(X). X = zebra ; ?- retract(hayvan(X)).

asserta, assertz ?- assert(p(b)),assertz(p(c)),assert(p(d)),asserta(p(a)). Yes ?- p(K). K = a ; K = b ; K = c ; K = d ; No Başa ekler Sona ekler

Microsoft Üstün Mühendislik Başarısı Sorular? Microsoft Gizliliği