BİL551 – YAPAY ZEKA Prolog Dili

Slides:



Advertisements
Benzer bir sunumlar
STRİNG FONKSİYONLARI.
Advertisements

PHP ile Lab Örnekleri Lab Çalışması.
Değişken , Veri Türleri ve Operatörler
Değişkenler ve bellek Değişkenler
JAVASCRİPT VERİ TÜRLERİ
JavaScript Birinci Hafta.
PHP-MySQL ile Profesyonel Web Programlama
Bölüm 2 C Dilinin Temelleri
C Programlama Diline Giriş
Prolog1 M.Fatih Amasyalı
Prolog2 M.Fatih Amasyalı
4 Kontrol Yapıları: 1.Bölüm.
Javascript Oğuz İNAL.
VERİ TİPLERİ VE DEĞİŞKENLER
SQL de Değişken Tanımlama
String Kütüphanesindeki Arama Fonksiyonları
YAPAY ZEKA ve UZMAN SİSTEMLER
Diziler.
Yapısal Program Geliştirme – if, if-else
NESNEYE YÖNELİK PROGRAMLAMANIN TEMEL İLKELERİ GENEL BİR BAKIŞ
Kabuk ve Kısayollar BİLGİSAYAR PROGRAMCILIĞI BÖLÜMÜ
SQL de Değişken Tanımlama
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
C ile Programlamaya Giriş
DEĞİŞKENLER, VERİ TÜRLERİ VE OPERATÖRLER
Temel Veri Türleri ve Operatörler
Koşul İfadeleri ve Akış Kontrolü Yazdığımız uygulamanın hangi koşulda nasıl davranacağını belirterek bir akış kontrolü oluşturabilmek için koşul ifadelerini.
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).
Akış Kontrol Mekanizmaları
DEĞİŞKENLER VE VERİ TİPLERİ
DEĞİŞKENLER.
NESNEYE-YÖNELİK PROGRAMLAMA
JAVA’DA DÖNGÜLER.
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
VERİ TİPLERİ VE DEĞİŞKENLER
C#’TA DÖNGÜLER onbirc.com/133.
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
String class String karakterler dizisidir
İNTERNET PROGRAMCILIĞI I BTP 207 Ders 8.  Tamsayı Değerler (Integer) Tamsayılar, 10 tabanlı (decimal), 8 tabanlı (octal) veya 16 tabanlı (hexadecimal)
STRING‘LER Karakter Kütüphanesi Fonksiyonları
Değerler ve Değişkenler
İKMAP İnternet 1 Ders Notu
Değişkenler Programda Değişken Tanımlama. Değişken nedir? (Variables) Program içinde kullanılan veri(data)nin tutulduğu alanın adıdır. Her veri bir tür.
BMS-301 Kabuk Programlama Güz 2015 (5. Sunu) (Yrd. Doç. Dr. Deniz Dal)
YAPAY ZEKA P ROLOG 1. Prolog’un özellikleri PROgrammig in LOGic Semboller üzerinde çalışma Gerçekler ve kurallardan oluşur Büyük küçük harfe duyarlıdır.
Adım Adım Algoritma.
SAYISAL ANALİZ Doç.Dr. Cüneyt BAYILMIŞ.
PROLOG. Prolog Programlarının özellikleri: - Programming in Logic teriminin kısaltılmasıyla adlandırılmıştır. - Semboller üzerinde çalışma prensibi üzerine.
Hazırlayan: Emrah GURSAN Giri ş & Tarihçe Bilgisayar, 'simgeleri işlemek için kullanılan bir makine‘ olarak tanımlanmaktadır. Görünüşte yalın.
OTO1004 Bilgisayar Destekli Mühendislik Dersi Sunu No:01 Öğr. Gör. Dr. Barış ERKUŞ.
Bölüm 2 C Dilinin Temelleri Genel Kavramlar Yazım ve Noktalama Kuralları C Kütüphaneleri C Dilindeki Sözcükler Değer Sabitleri Veri Tipleri Değişkenler.
Programlamaya Giriş-I Bölüm-1. Algoritma Algoritma günlük yaşamımızda yaptığımız işler sırasında sıklıkla kullandığımız bir yöntemdir. Algoritma, bir.
7. HAFTA.
Prolog ile Mantık Programlamaya Giriş
C Programlama Dili Bilgisayar Mühendisliği.
Programlama Dillerinin Temel Elemanları
METHODLAR VE KOŞULLAR.
Yapay Zeka ve Uzman Sistemler
VERİ TÜRLERİ.
ACTIONSCRIPT TEMELLER İ SAVAŞ TUNÇER
2.2. Özel Semboller ve Pascal Sözcükleri
Excel’de VBA Programlama (Visual Basic Application)
ARDUİNO Arduino Eğitimleri Bölüm 3 Programlama Dili Temelleri
Bilgisayar Programlama
Bilgisayar Bilimi Problem Çözme Süreci-2.
2.2. Özel Semboller ve Pascal Sözcükleri
BÖLÜM 2 FORTRAN PROGRAMLAMA DİLİNE GİRİŞ
Akis diyagramı Örnekleri
Prolog Programlama Dili
Sunum transkripti:

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

Prolog’un özellikleri PROgrammig in LOGic Semboller üzerinde çalışma Gerçekler ve kurallardan oluşur Büyük küçük harfe duyarlıdır Sabitler için Küçük harfler Değişkenler için Büyük harfler Program çıktıları çok sade Prolog’da olmayanlar For, while döngüleri IF…THEN yapısı Diziler ANCAK öz yinelemeli fonksiyonlarla yukarıdakiler sağlanır

Dekleratif Programlama Prolog  Dekleratif programlama dili Prosedürel programlamada adım adım ne yapılması gerektiğini kodlarız (Ör: C, Pascal, Java vs.) Dekleratif programlamada bir durum tanımlanır. Bu tanıma göre yorumlayıcı ya da derleyici bir çözüm üretir Prolog bir cümlenin doğru / yanlış olduğunu cümle içinde değişken(ler) varsa cümlenin doğru olması için o değişken(ler)in değer(ler)inin ne olması gerektiğini söyler. 3

Örnek : Aile Ağacı 4

İlişkileri gerçek(fact)lerle tanımlama “Tom, Bob’un ebeveynidir” gerçeğinin prolog’da ifadesi: parent(tom, bob). parent: ilişkinin ismi tom ve bob: ilişkinin argümanları (atomlar) .: sonlandırıcı 5

Aile Ağacı Tüm aile ağacını aşağıdaki Prolog ifadeleriyle tanımlarız: parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). 6

Prolog Sorguları ?- iliski(a,b). ?- iliski(A,b). a ve b arasında iliski isminde bir ilişki var mı? cevap YES yada NO ?- iliski(A,b). b ile iliski adlı ilişkiyi doğrulayan A lar nelerdir? cevap varsa A lar yoksa NO A: değişken a, b: atom (sabit) 7

İlişkileri sorgulamak-1 Bob, Pat’in ebeveyni mi? ?- parent(bob, pat). yes Tom, Ben’in ebeveyni mi? : ?- parent(tom, ben). no 8

İlişkileri sorgulamak-2 Liz’in ebeveyni kimdir? ?- ebeveyn(Kim, liz). Prolog’un cevabı : Kim = tom Bob’un çocukları kimlerdir? ?- ebeveyn(bob, Cocuk). Cocuk = ann ; Cocuk = pat ; no 9

İlişkileri sorgulamak-3 Kimler kimlerin çocuğudur? ?- ebeveyn (Ebeveyn, Cocuk). Ebeveyn = pam Cocuk = bob; Ebeveyn = tom Cocuk = liz; … Çözümler listesini yarıda kesmek için enter Devam ettirmek için ; 10

İlişkileri sorgulamak-4 Jim’in büyük ebeveyni (grandparent) kimdir? Bilgi tabanımızda büyük ebeveyn diye bir ilişki tanımlı değil. Büyük ebeveyn ilişkisi iki ebeveyn ilişkisinin «ve» lenmesiyle elde edilebilir. ?- parent(Y, jim), parent(X, Y). X=bob Y=pat 11

İlişkileri sorgulamak-5 Torun ilişkisi de benzer biçimde tanımlanabilir. tom, X’in ebeveyni, X, Y’nin ebeveyni ise Y, tom’un torunudur. ?- parent(tom,X), parent(X, Y). X=bob Y=ann; Y=pat; no 12

Çocuk ilişkisi parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat, jim). offspring(bob, pam). offspring(bob, tom). offspring(liz, tom). offspring(ann, bob). offspring(pat, bob). offspring(jim, pat). 13

Kurallar Kurallar iki parçadan oluşur: head : böyledir (sonuç, çıkarım) body : eğer 14

Kuralların Çalışması Sorgu: Veritabanı: offspring(liz, tom). Çalışma Mekanizması: offsprings ilişkisi için gerçek ara Yok => offsprings ilişkisi için kural varsa uygula Kuralda X tom’la , Y liz’le eşleştirilerek kuralın bir gerçeklemesi bulunur: offspring(liz,tom) :- parent(tom,liz). parents(tom,liz). gerçeği aranır. Bulunduğunda kuralın eğer kısmı doğrulandığından böyledir kısmı da doğrulanmış olur ve prolog “yes” cevabını verir Sorgu: offspring(liz, tom). parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). offspring(Y, X) :- parent(X, Y). 15

Örnek: Anne ilişkisi mother(X, Y) :- parent(X, Y), female(X). Tüm X ve Y ler için, X, Y’nin annesidir Eğer X, Y’nin ebeveyni ise ve X kadınsa. İlişkinin Prolog’da ifadesi : mother(X, Y) :- parent(X, Y), female(X). 16

Örnek: Kız kardeş ilişkisi Tüm X ve Y ler için, X, Y’nin kız kardeşidir Eğer X ve Y aynı ebeveyne sahip ise ve X bayansa İlişkinin Prolog’da ifadesi : sister(X, Y) :- parent(Z, X), parent(Z, Y), female(X). Sorgu: sister(X,pat). 17

Örnek: Hala ilişkisi Tüm X ve Y ler için, X, Y’nin halasıdır Eğer Z, Y’nin ebeveyni ise ve Z, erkek ise ve X, Z’in kız kardeşi ise İlişkinin Prolog’da ifadesi : sister(X, Y) :- parent(Z, X), parent(Z, Y), female(X). hala(X,Y) :- parent(Z,Y), male(Z), sister(X,Z). 18

Direkt Ata İlişkisi Prolog ifadesi: Tüm X ve Z ler için, X, Z’nin atasıdır eğer X, Z’nin ebeveyni ise Prolog ifadesi: predecessor(X, Z) :- parent(X, Z). 19

Dolaylı (Endirekt) Ata İlişkisi 20

Dolaylı Ata Programı Problemleri: Uzun … Büyük büyük büyük … predecessor(X,Z) :- parent(X,Z). predecessor(X,Z) :- parent(X,Y), parent(Y,Z). predecessor(X,Z) :- parent(X,Y1), parent(Y1,Y2), parent(Y2,Z). parent(Y2,Y3), parent(Y3, Z). … Problemleri: Uzun … Büyük büyük büyük … Ataları bulamaz. 21

Yeni Ata Programı Çözüm: öz yineleme kullanmak Tüm X ve Z ler için, X, Z’nin Ata’sıdır Eğer Y diye bir kişi varsa ve (1) X, Y’nin ebeveyni ise ve (2) Y, Z’nin Ata’sı ise Prolog ifadesi: predecessor(X, Z) :- parent(X, Y), predecessor(Y, Z). 22

Sonuç Ata İlişkisi parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). predecessor(X, Z) :- parent(X, Z). predecessor(X, Z) :- parent(X, Y),predecessor(Y, Z). HEDEF / SORGU ?-predecessor(tom, pat). PR1 PR2 23

Cevap nasıl bulunur? Prolog hedefe ulaşmak için programdaki yazılış sırasına göre cümlecikleri kullanır. 24

Doğal Dil vs. Prolog Bütün çocuklar kısadır. kisa(X):-cocuk(X). Bütün erkek çocuklar arabaları sever. sever(X,araba):-erkek(X),cocuk(X). Bütün çocukların annesi vardır. var(X,anne):-cocuk(X). Sebzeyi hiçbir çocuk sevmez. sevmez(X,Y):-sebze(Y), cocuk(X). Çocuğunu döven öğretmeni hiçbir anne sevmez. sevmez(X,Y):-anne(X,Z),ogretmen(Y,Z),dover(Y,Z). 25

Doğal Dil vs. Prolog 2 Bütün insanlar canlıdır. Ahmet insandır. Dolayısıyla Ahmet canlıdır. canli(X):-insan(X). insan(ahmet). ?-canli(ahmet). Ahmet 20 metre zıplayabilir. Birisi X metreye zıplayabilirse daha azlarına da zıplayabilir. ziplar(ahmet,20). ziplar(X,Y):-ziplar(X,Z),Z>Y. ?-ziplar(ahmet,15). Kendi kalesine gol atan futbolcuyu kendi takımının taraftarları sevmez, karşı takımınkiler sever. sevmez(Y,X):- futbolcu(X), taraftar(Y), aynitakim(X,Y), kendikalesinegolatar(X). sever(Y,X):- futbolcu(X), taraftar(Y), karsitakim(X,Y), kendikalesinegolatar(X). 26

SWI Prolog’la çalışmak SWI prolog kurulur. http://www.swi-prolog.org Gerçekler ve kurallar .pl uzantılı bir dosyaya kaydedilir.

SWI Prolog’la çalışmak .pl uzantılı dosyanın üzerine çift tıklanarak

SWI Prolog’la çalışmak Yada SWI prolog açıldıktan sonra file menüsünden dosya ‘consult’ edilerek

SWI Prolog’la çalışmak Gerçek ve kurallarımız prolog’a yüklenir. Artık sorgularımız komut satırından girilerek çalıştırılabilir.

Prolog’da Veri Türleri Prolog bir veri türünü onun şeklinden tanır. Atom Sayı Değişken Prolog herhangi bir veri tanımına ihtiyaç duymaz. Sabitler gibi düşünülebilir 31

Atomlar (1) Atom’lar aşağıdakilerden oluşan string’lerdir. Büyük harf A, B, …, Z Küçük harf a, b, …, z Rakam 0, 1, …, 9 Özel karakterler + - * / < > = : . & _ ~ 32

Atomlar (2) Atom’lar 3 farklı şekilde oluşturulabilir: Harf, rakam ve altçizgi (‘_’) den oluşan küçük harfle başlayan string’ler ile: anna nil x25 x_25AB x_ x___y alpha_beta_procedure sarah_jones 33

Atomlar (3) Özel karakterlerden oluşan string’ler ile: <---> ======> … .:. ::= Özel anlamı olan string’ler kullanılmamalı: :- 34

Atomlar (4) Tek tırnak (’) arasına alınan karakterler ile: ‘Tom’ ‘South_America’ ‘Sarah Jones’ Büyük harfle başlayan Atom’lar oluşturmak için kullanılabilir. Değişkenlerden bu şekilde ayrılabilirler. 35

Sayılar Prolog’da iki tür sayı kullanılabilir Tamsayılar (integer) 1 0 -97 1313 En büyük ve en küçük sayı prolog derleyicisine bağlıdır. Ondalıklı sayılar (real) 3.14 100.2 -0.0035 Genelde tamsayılar kullanılır. Ondalıklı sayılar pek fazla kullanılmaz => Çünkü: topla(X,Y,Z):-Z is X+Y. ?- topla(2,0.3,C). C = 2.3 ; No ?- topla(200,0.0003,C). C = 200.0 ; 36

Değişkenler (1) Harf, rakam ve altçizgi (‘_’) den oluşan büyük harfle ya da altçizgi ile başlayan string’lerdir: X Result Object2 Participant_list ShoppingList _x23 _23 37

Değişkenler (2) Anonim değişken: isimlendirilmemiş değişkenlerdir. Sadece altçizgi ile ifade edilirler: hasachild(X) :- parent(X, Y). hasachild(X) :- parent(X, _). Her altçizgi karakteri yeni bir anonim değişkeni ifade eder. somebody_has_a_child :- parent(_, _). %r1 X Y Anonim değişkenlerin değerleri çıkış olarak verilmez. ?- parent(ali,Y). : ali’in çocuğu var mı? Ve varsa çocuklarının isimleri nedir? ?- parent(ali,_). : sadece ali’in çocuğu var mı? 38

Değişken ve Atom’ların Faaliyet Alanları (Scope) Bir değişkenin değeri bir cümlecik içinde sabittir Bir atomun değeri tüm program boyunca sabittir 39

Aşırı Yükleme Aynı isimde farklı ilişkiler olabilir: point(1, 1), point(1, 1, 1), point(1, 1, 1, 1), … +(X,Y,Z):-Z is X+Y. +(X,Y,Z,F):-F is X+Y+Z. ?- +(200,0.03,7.2,G). G = 207.23 ; No ?- +(200,0.03,G). G = 200.03 ; 40

Ve , veya ; (1) P :- Q; R. P doğrudur Eğer Q doğruysa veya R doğruysa Aynı ifadeyi aşağıdaki şekilde de yazabiliriz: P :- Q. P :- R. 41

Ve , veya ; (2) Ve, veya’dan daha yüksek önceliklidir. Aşağıdaki iki ifade aynı sonucu verir: P :- Q, R; S, T, U. P :- (Q, R); (S, T, U). Aynı ifadeyi aşağıdaki şekilde de yazabiliriz: P :- Q, R. P :- S, T, U. 42

Hedefleri Birleştirme araba(chrysler,130000,3,kirmizi,12000). araba(ford,90000,4,gri,25000). araba(ferrari,30000,5,siyah,30000). kamyon(mercedes,10000,2,mavi,20000). kamyon(ford,50000,8,sari,28000). kamyon(volvo,35000,2,siyah,35000). arac(Marka,Kilometresi,Yas,Renk,Fiyat):- araba(Marka,Kilometresi,Yas,Renk,Fiyat); kamyon(Marka,Kilometresi,Yas,Renk,Fiyat). 43

Fiyatı 25000’den az olan araçlar: ?- arac(Marka,KiloMetre,Yasi,Renk,Fiyat), Fiyat<25000. Marka = chrysler KiloMetre = 130000 Yasi = 3 Renk = kirmizi Fiyat = 12000 ; Marka = mercedes KiloMetre = 10000 Yasi = 2 Renk = mavi Fiyat = 20000 ; No 44

Hedef Birleştirme Hasta mı? tahlil(ahmet,tahlil1,90). tahlil(ahmet,tahlil2,25). tahlil(ahmet,tahlil3,10). yuksektansiyon(X) :- (tahlil(X,tahlil1,Y),Y>100); (tahlil(X,tahlil2,Z),Z<30). kalphastasi(X) :- yuksektansiyon(X), tahlil(X,tahlil3,Q), Q<20. ?-kalphastasi(ahmet).

Turnuva oyuncu(ahmet,10). oyuncu(mehmet,12). oyuncu(ali,10). ?- oyuncu(B,10),oyuncu(B2,10),B\==B2. B = ahmet B2 = ali ; B2 = huseyin ; B = ali B2 = ahmet ; B = huseyin No oyuncu(ahmet,10). oyuncu(mehmet,12). oyuncu(ali,10). oyuncu(huseyin,10). 10 yaşındaki çocuklar arasında oynanabilecek maçlar nelerdir? Sayı ve string’ler arası Karşılaştırma : == eşit \== eşit değil 46

Cümleciklerin ve Kuralların Sıralaması (1) Kurallar ve cümleciklerin sırası değiştirilebilir Örneğin, Ata ilişkisi iki kuraldan oluşmakta ve ilişkilerden biri iki cümlecikten oluşmaktadır: predecessor(X, Y) :- parent(X, Y). predecessor(X, Z) :- parent(X, Y), predecessor(Y, Z). Olası versiyonlar: Cümleciklerin yerini değiştirerek, Kuralların yerini değiştirerek. 47

Cümleciklerin ve Kuralların Sıralaması (2) Orijinal Versiyon pred1(X, Z) :- parent(X, Z). pred1(X, Z) :- parent(X, Y), pred1( Y, Z). Versiyon a: Kuralların yerini değiştir pred2(X, Z) :- parent(X, Y), pred2( Y, Z). pred2(X, Z) :- parent(X, Z). 48

Cümleciklerin ve Kuralların Sıralaması (3) Versiyon b: İkinci kuraldaki cümleciklerin yerini değiştir pred3(X, Z) :- parent(X, Z). pred3(X, Z) :- pred3( X, Y), parent(Y, Z). Versiyon c: Hem kuralların hem cümleciklerin yerini değiştir pred4(X, Z) :- pred4( X, Y), parent(Y, Z). pred4(X, Z) :- parent(X, Z). 49

4 versiyonun verdiği cevaplar ?- pred1(tom, pat). yes ?- pred2(tom, pat). Yes ?- pred3(tom, pat). ?- pred4(tom, pat). Stack overflow!!! 50

pred1(X,Z):-parent(X,Z). pred1(X,Z):-parent(X,Y), pred1(Y, Z). Y = bob by rule pr1 pr2 no pred1(tom, pat) parent(tom, pat) parent(tom, Y) pred1(Y, pat) by fact parent(tom, bob) pred1(bob, pat) yes parent(bob, pat) parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). pred1(X,Z):-parent(X,Z). pred1(X,Z):-parent(X,Y), pred1(Y, Z). 51

parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). 1 pr1 tom ile başlayan 2 parent ilişkisi (bob ve liz) bulunduğundan ikisini de dene 2 bob ile başlayan 2 parent ilişkisi (ann ve pat) bulunduğundan ikisini de dene 3 13 pr1 pr2 4 pr1 pr1 5 pr1 7 pr2 6 parent(ann,Y’’) pred2(Y’’,pat) 8 pr1 pr2 12 parent(pat,Y’’’) pred2(Y’’’,pat) ann ile başlayan parent ilişkisi bulamadığından No 9 10 pr1 pr2 11 jim ile başlayan parent ilişkisi bulamadığından No 52

pred3(X, Z) :- parent(X, Z). parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). pred3(tom,Y’) parent(Y’,pat) pred3(X, Z) :- parent(X, Z). pred3(X, Z) :- pred3( X, Y), parent(Y, Z). 53

parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). 54

Prolog’da Problem Çözme Ata ilişkisinde iki fikir var: İki nesne arasında parent ilişkisi var mı? İki nesne arasında her ikisiyle de parent ilişkisine sahip olan başka birisi var mı? pred1 en basit fikri dener. pred4 en karmaşık ilişkileri dener. pred2 ve pred3 bu iki uç arasındadır. Sonuç olarak Önce en basit fikri dene. 55

Nereden Nereye? yolvar(1,4). yolvar(1,3). yolvar(4,2). yolvar(2,3). ?- gidilir(1,5). 1423 Yes ?- gidilir(4,1). 42356 ?- gidilir(3,1). 35 No yolvar(1,4). yolvar(1,3). yolvar(4,2). yolvar(2,3). yolvar(3,5). yolvar(4,6). yolvar(6,1). gidilir(X,Y):-write(X),yolvar(X,Y). gidilir(X,Y):-yolvar(X,Z),gidilir(Z,Y). 56

Aritmetik & Karşılaştırma +, -, *, /, mod is: hesaplamaya zorlamak (force) için: X = 1 + 2. X=1+2 X is 1 + 2. X=3 Karşılaştırma operatörleri X > Y büyük X < Y küçük X >= Y büyük veya eşit X =< Y küçük veya eşit X =:= Y eşit mi? X =\= Y farklı mı? 57

X’den 1’e yaz yazdir(M):- yazdir(8). not(M=0), write(M), write(' '), K is M-1, yazdir(K). yazdir(8). 8 7 6 5 4 3 2 1 No 58

X kere h yaz hyaz(X):- ?- hyaz(3). not(X=0), Y is X-1, put(104), hyaz(Y). ?- hyaz(3). hhh No 59

guc(X,Y,Z)  XY=Z ?- guc(3,4,G). G = 81 ; No guc(X,1,X). guc(X,Y,Z):- G is Y-1, guc(X,G,T), Z is X*T. ?- guc(3,4,G). G = 81 ; No

fact(N,F)  N!=F ?- fact(5,E). E = 120 ; No fact(0,1). fact(N,F) :- G is N-1, fact(G,T), F is N * T. ?- fact(5,E). E = 120 ; No

topla(X,Y)  Y = 1+2+...+X topla(1,1). topla(N,F) :- N>1, G is N-1, topla(G,T), F is N + T.

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