MZI
Fakultas Informatika
Telkom University
FIF Tel-U
November 2015
Slide ini disusun berdasarkan materi yang terdapat pada sumber-sumber berikut:
1 Logic Programming with Prolog, Edisi 2, 2013, oleh Max Bramer.
2 Discrete Mathematics and Its Applications (Bab 1), Edisi 7, 2012, oleh K. H.
Rosen.
3 Discrete Mathematics with Applications (Bab 3), Edisi 4, 2010, oleh S. S.
Epp.
4 Mathematical Logic for Computer Science (Bab 5, 6), Edisi 2, 2000, oleh M.
Ben-Ari.
5 Slide kuliah Logika Komputasional (Computational Logic) di Fasilkom UI
oleh L. Y. Stefanus.
6 Slide kuliah Pemrograman Logika di ILLC, Universitas of Amsterdam oleh U.
Endriss.
7 Slide kuliah Pemrograman Fungsional di Fasilkom UI oleh A. Azurat.
8 Slide kuliah Logika Matematika di Telkom University oleh A. Rakhmatsyah,
B. Purnama.
MZI (FIF Tel-U) Pemrograman Logika November 2015 2 / 69
Acknowledgements II
Beberapa gambar dapat diambil dari sumber-sumber di atas. Slide ini ditujukan
untuk keperluan akademis di lingkungan FIF Telkom University. Jika Anda
memiliki saran/ pendapat/ pertanyaan terkait materi dalam slide ini, silakan kirim
email ke <pleasedontspam>@telkomuniversity.ac.id.
8 Tugas Kelompok
Bahasan
8 Tugas Kelompok
Epigram
A language that doesn’t a¤ect the way you think about programming,
is not worth knowing
(Alan Jay Perlis, …rst recipient of Turing Award)
Sejarah Prolog
Bahasan
8 Tugas Kelompok
Source …le yang diperlukan untuk instalasi dapat diunduh dari beberapa tautan
berikut:
Amzi! Prolog (http://www.amzi.com/products/prolog_products.htm).
Logic Programming Associates Prolog (http://www.lpa.co.uk).
SWI-Prolog (http://www.swi-prolog.org/).
Visual Prolog (http://www.visual-prolog.com/).
W-Prolog (http://waitaki.otago.ac.nz/ michael/wp/).
Dalam slide kuliah ini, program Prolog ditulis dalam syntax SWI-Prolog. Semua
program pada slide kuliah ini dijalankan pada SWI-Prolog 64-bit versi 7.2.2 yang
telah diuji coba pada sistem operasi Windows 7 64-bit dan Linux Ubuntu 14.04
64-bit. SWI-Prolog adalah salah satu versi Prolog yang paling sederhana dan
paling mudah untuk digunakan dalam mempelajari pemrograman logika dengan
Prolog. SWI-Prolog dapat dijalankan pada sistem operasi Windows, Linux,
maupun Macintosh.
Pada tahun 2013, SWI-Prolog adalah satu-satunya varian Prolog yang boleh
digunakan dalam Prolog Programming Contest. Acara ini merupakan acara
tahunan yang diadakan bersamaan dengan ICLP (International Conference on
Logic Programming ).
Untuk sistem operasi Windows dan Macintosh, …le instalasi dapat diunduh di
http://www.swi-prolog.org/download/stable. Untuk sistem operasi
Windows XP/ Vista/ 7/ 8 baik 32 maupun 64-bit, instalasi dapat dilakukan
dengan mudah seperti instalasi program pada umumnya. Direktori instalasi dapat
disesuaikan dengan kebutuhan, contohnya di C:nProgram Filesnswipl. Instalasi
telah diujicoba dan berjalan cukup lancar pada sistem operasi Windows 7 64-bit.
Untuk sistem operasi Linux Ubuntu, instalasi SWI-Prolog dapat dilakukan via PPA
(Personal Package Archive). Buka terminal, kemudian ketik perintah-perintah
berikut:
% swipl
?- emacs.
Perintah ?- emacs. berfungsi untuk menjalankan GUI pada Linux yang serupa
dengan GUI pada Windows.
Untuk sistem operasi Linux dengan distro selain Ubuntu, instalasi dapat dilakukan
dengan meninjau tautan
http://www.swi-prolog.org/build/LinuxDistro.txt.
Tentang SWI-Prolog
Bahasan
8 Tugas Kelompok
Ketika Anda membuka interpreter SWI-Prolog, maka Anda akan melihat prompt:
1 ?-
Ketikkan perintah berikut pada SWI-Prolog:
write(’Hello World’),nl,write(’Welcome to Prolog’),nl.
Ketika Anda membuka interpreter SWI-Prolog, maka Anda akan melihat prompt:
1 ?-
Ketikkan perintah berikut pada SWI-Prolog:
write(’Hello World’),nl,write(’Welcome to Prolog’),nl.
Hello World
Welcome to Prolog
true.
write dan nl adalah dua contoh built-in-predicate (BIP) pada SWI-prolog,
write(’x’) berfungsi untuk mengeluarkan tulisan x dan nl berfungsi untuk
memindahkan keluaran berikutnya ke baris yang baru. Perintah pada Prolog
harus diakhiri oleh tanda titik (.).
1 ?- X is 1+2.
1 ?- X is 1+2.
X = 3.
2 ?- X is 3-7.
1 ?- X is 1+2.
X = 3.
2 ?- X is 3-7.
X = -4.
3 ?- X is 2*3.
1 ?- X is 1+2.
X = 3.
2 ?- X is 3-7.
X = -4.
3 ?- X is 2*3.
X = 6.
4 ?- X is 7/3.
1 ?- X is 1+2.
X = 3.
2 ?- X is 3-7.
X = -4.
3 ?- X is 2*3.
X = 6.
4 ?- X is 7/3.
X = 2.3333333333333335.
5 ?- X is 3^2. [Operasi xy juga dapat ditulis x y]
1 ?- X is 1+2.
X = 3.
2 ?- X is 3-7.
X = -4.
3 ?- X is 2*3.
X = 6.
4 ?- X is 7/3.
X = 2.3333333333333335.
5 ?- X is 3^2. [Operasi xy juga dapat ditulis x y]
X = 9.
6 ?- X is 3+5*2.
1 ?- X is 1+2.
X = 3.
2 ?- X is 3-7.
X = -4.
3 ?- X is 2*3.
X = 6.
4 ?- X is 7/3.
X = 2.3333333333333335.
5 ?- X is 3^2. [Operasi xy juga dapat ditulis x y]
X = 9.
6 ?- X is 3+5*2.
X = 13.
7 ?- X = 3*3.
1 ?- X is 1+2.
X = 3.
2 ?- X is 3-7.
X = -4.
3 ?- X is 2*3.
X = 6.
4 ?- X is 7/3.
X = 2.3333333333333335.
5 ?- X is 3^2. [Operasi xy juga dapat ditulis x y]
X = 9.
6 ?- X is 3+5*2.
X = 13.
7 ?- X = 3*3.
X = 3*3.
Kalkulasi aritmetika pada SWI-Prolog dilakukan dengan predikat is. Tanda =
pada Prolog digunakan untuk memeriksa kesamaan term.
MZI (FIF Tel-U) Pemrograman Logika November 2015 24 / 69
Pemakaian Interpreter Interaktif
1 ?- X is 9/4.
1 ?- X is 9/4.
X = 2.25.
2 ?- X is 9//4.
1 ?- X is 9/4.
X = 2.25.
2 ?- X is 9//4.
X = 2.
3 ?- X is 9 mod 4.
1 ?- X is 9/4.
X = 2.25.
2 ?- X is 9//4.
X = 2.
3 ?- X is 9 mod 4.
X = 1.
Simbol <= dan => bukan operator perbandingan nilai numerik pada Prolog.
Bahasan
8 Tugas Kelompok
Misalkan Male (x) adalah predikat yang menyatakan bahwa “x adalah laki-laki”
dan Female (x) adalah predikat yang menyatakan bahwa “x adalah perempuan”.
Misalkan Male (x) adalah predikat yang menyatakan bahwa “x adalah laki-laki”
dan Female (x) adalah predikat yang menyatakan bahwa “x adalah perempuan”.
Misalkan Male (x) adalah predikat yang menyatakan bahwa “x adalah laki-laki”
dan Female (x) adalah predikat yang menyatakan bahwa “x adalah perempuan”.
Skrip Prolog
Fakta-fakta tersebut dapat dituliskan dalam skrip Prolog sebagai berikut.
Predikat diawali dengan huruf kecil, begitu pula dengan term. Term tidak
boleh diawali dengan huruf kapital.
Term boleh diapit dengan tanda kutip tunggal, contohnya male(‘Bob’).
Komentar pada skrip Prolog diawali dengan tanda % atau diapit dengan
tanda /* dan */.
?- male(anakin).
?- male(anakin).
false.
?- female(anakin).
?- male(anakin).
false.
?- female(anakin).
false.
?- not(male(anakin)).
?- male(anakin).
false.
?- female(anakin).
false.
?- not(male(anakin)).
true.
?- not(female(anakin)).
?- male(anakin).
false.
?- female(anakin).
false.
?- not(male(anakin)).
true.
?- not(female(anakin)).
true.
Catatan
Ketika Prolog memproses query not(...), Prolog melakukannya dengan
memeriksa apakah fakta (...) benar. Jika fakta (...) tidak benar, maka
Prolog akan mengembalikan nilai true. Perlu diperhatikan bahwa penalaran
(reasoning ) yang dilakukan Prolog didasarkan pada asumsi dunia tertutup (closed
world assumption). Berdasarkan asumsi ini, semua hal yang benar adalah hal yang
tertulis pada program atau dapat diturunkan dari fakta-fakta yang ada pada
program.
MZI (FIF Tel-U) Pemrograman Logika November 2015 35 / 69
Dasar Pemrograman Prolog: Fakta-fakta Dasar dan Query
Variabel pada Prolog selalu diawali dengan huruf kapital. Biasanya variabel
ditulis dengan satu huruf kapital saja (contohnya X, Y, atau Z). Variabel dapat
digunakan pada interpreter untuk menampilkan semua objek yang memberikan
nilai kebenaran untuk predikat tertentu.
?- male(X).
Variabel pada Prolog selalu diawali dengan huruf kapital. Biasanya variabel
ditulis dengan satu huruf kapital saja (contohnya X, Y, atau Z). Variabel dapat
digunakan pada interpreter untuk menampilkan semua objek yang memberikan
nilai kebenaran untuk predikat tertentu.
?- male(X).
X = bob; [tekan tabulasi untuk melihat hasil berikutnya]
Variabel pada Prolog selalu diawali dengan huruf kapital. Biasanya variabel
ditulis dengan satu huruf kapital saja (contohnya X, Y, atau Z). Variabel dapat
digunakan pada interpreter untuk menampilkan semua objek yang memberikan
nilai kebenaran untuk predikat tertentu.
?- male(X).
X = bob; [tekan tabulasi untuk melihat hasil berikutnya]
X = charlie;
Variabel pada Prolog selalu diawali dengan huruf kapital. Biasanya variabel
ditulis dengan satu huruf kapital saja (contohnya X, Y, atau Z). Variabel dapat
digunakan pada interpreter untuk menampilkan semua objek yang memberikan
nilai kebenaran untuk predikat tertentu.
?- male(X).
X = bob; [tekan tabulasi untuk melihat hasil berikutnya]
X = charlie;
X = david;
Variabel pada Prolog selalu diawali dengan huruf kapital. Biasanya variabel
ditulis dengan satu huruf kapital saja (contohnya X, Y, atau Z). Variabel dapat
digunakan pada interpreter untuk menampilkan semua objek yang memberikan
nilai kebenaran untuk predikat tertentu.
?- male(X).
X = bob; [tekan tabulasi untuk melihat hasil berikutnya]
X = charlie;
X = david;
X = hans;
Variabel pada Prolog selalu diawali dengan huruf kapital. Biasanya variabel
ditulis dengan satu huruf kapital saja (contohnya X, Y, atau Z). Variabel dapat
digunakan pada interpreter untuk menampilkan semua objek yang memberikan
nilai kebenaran untuk predikat tertentu.
?- male(X).
X = bob; [tekan tabulasi untuk melihat hasil berikutnya]
X = charlie;
X = david;
X = hans;
X = jim.
?- female(Person).
?- female(Person).
Person = alice;
?- female(Person).
Person = alice;
Person = emma;
?- female(Person).
Person = alice;
Person = emma;
Person = fiona;
?- female(Person).
Person = alice;
Person = emma;
Person = fiona;
Person = grace;
?- female(Person).
Person = alice;
Person = emma;
Person = fiona;
Person = grace;
Person = irene;
?- female(Person).
Person = alice;
Person = emma;
Person = fiona;
Person = grace;
Person = irene;
Person = kelly;
?- female(Person).
Person = alice;
Person = emma;
Person = fiona;
Person = grace;
Person = irene;
Person = kelly;
Person = lily.
Misalkan D adalah domain yang telah dijelaskan sebelumnya dan Parent (x; y)
adalah predikat biner yang menyatakan bahwa “x adalah orang tua dari y”.
Misalkan kita memiliki fakta-fakta berikut dalama formula logika predikat.
Parent (Alice; Charlie), Parent (Bob; Charlie), Parent (Bob; Emma).
Parent (Charlie; F iona), Parent (Charlie; Grace), Parent (Emma; Irene).
Parent (F iona; David), Parent (F iona; Lily), Parent (Grace; Jim),
Parent (Grace; Kelly), Parent (Hans; Jim), Parent (Hans; Kelly).
Catatan
Proses mengedit …le Prolog yang telah dibuat sebelumnya dapat dilakukan dengan
cara:
Pada Windows:
Pada interpreter Prolog, pilih File ! Edit dan kemudian pilih berkas yang
akan diedit.
Pada editor teks, pilih File ! Open dan kemudian pilih berkas yang akan
diedit.
Pada Linux: pada emacs pilih File ! Open dan kemudian pilih berkas yang akan
diedit.
?- parent(OrangTua,Anak).
?- parent(OrangTua,Anak).
OrangTua = alice,
Anak = charlie;
?- parent(OrangTua,Anak).
OrangTua = alice,
Anak = charlie;
OrangTua = bob,
Anak = charlie;
..
. [ada cukup banyak keluaran]
?- parent(OrangTua,Anak).
OrangTua = alice,
Anak = charlie;
OrangTua = bob,
Anak = charlie;
..
. [ada cukup banyak keluaran]
OrangTua = hans,
Anak = jim;
?- parent(OrangTua,Anak).
OrangTua = alice,
Anak = charlie;
OrangTua = bob,
Anak = charlie;
..
. [ada cukup banyak keluaran]
OrangTua = hans,
Anak = jim;
OrangTua = hans,
Anak = kelly.
Untuk mengetahui semua anak dari Fiona, kita dapat melakukan query
parent(fiona,X). Kemudian untuk mengetahui semua orang tua dari Jim, kita
dapat melakukan query parent(X,jim).
?- parent(fiona,X).
Untuk mengetahui semua anak dari Fiona, kita dapat melakukan query
parent(fiona,X). Kemudian untuk mengetahui semua orang tua dari Jim, kita
dapat melakukan query parent(X,jim).
?- parent(fiona,X).
X = david;
X = lily.
?- parent(X,jim).
Untuk mengetahui semua anak dari Fiona, kita dapat melakukan query
parent(fiona,X). Kemudian untuk mengetahui semua orang tua dari Jim, kita
dapat melakukan query parent(X,jim).
?- parent(fiona,X).
X = david;
X = lily.
?- parent(X,jim).
X = grace;
X = hans.
Bahasan
8 Tugas Kelompok
gentleman(X):- male(X),adult(X).
lady(X):- female(X),adult(X).
teen_boy(X):- male(X),teen(X).
teen_girl(X):- female(X),teen(X).
little_boy(X):- male(X),kid(X).
little_girl(X):- female(X),kid(X).
Ekspresi gentleman(X):- male(X),adult(X) merupakan suatu klausa (clause)
pada Prolog.
Serupa dengan hal di atas, klausa hPi:- hQi;hRi. berarti “jika hQi atau hRi
dipenuhi, maka hPi dipenuhi”.
Contoh
Serupa dengan hal di atas, klausa hPi:- hQi;hRi. berarti “jika hQi atau hRi
dipenuhi, maka hPi dipenuhi”.
Contoh
Kita memeliki gentlemen(X):- male(X),adult(X), ini setara dengan kondisi
formula logika predikat yang menyatakan Male (x) ^ Adult (x) ! Gentleman (x).
Dengan perkataan lain, jika x adalah laki-laki dan x dewasa, maka x adalah
gentleman.
Dari skrip Prolog yang telah kita buat sebelumnya, misalkan kita ingin
menyatakan dua hal berikut:
1 semua remaja maupun anak kecil laki-laki menyukai permainan FIFA16
2 semua remaja maupun anak kecil perempuan menyukai permainan Candy
Crush
Kita dapat mende…nisikan formula logika predikat:
1 LovesFIFA16 (x) :=
Dari skrip Prolog yang telah kita buat sebelumnya, misalkan kita ingin
menyatakan dua hal berikut:
1 semua remaja maupun anak kecil laki-laki menyukai permainan FIFA16
2 semua remaja maupun anak kecil perempuan menyukai permainan Candy
Crush
Kita dapat mende…nisikan formula logika predikat:
1 LovesFIFA16 (x) := TeenBoy (x) _ LittleBoy (x)
2 LovesCandyCrush (x) :=
Dari skrip Prolog yang telah kita buat sebelumnya, misalkan kita ingin
menyatakan dua hal berikut:
1 semua remaja maupun anak kecil laki-laki menyukai permainan FIFA16
2 semua remaja maupun anak kecil perempuan menyukai permainan Candy
Crush
Kita dapat mende…nisikan formula logika predikat:
1 LovesFIFA16 (x) := TeenBoy (x) _ LittleBoy (x)
2 LovesCandyCrush (x) := TeenGirl (x) _ LittleGirl (x)
Kedua formula tersebut dapat ditranslasikan ke dalam Prolog menjadi:
Dari skrip Prolog yang telah kita buat sebelumnya, misalkan kita ingin
menyatakan dua hal berikut:
1 semua remaja maupun anak kecil laki-laki menyukai permainan FIFA16
2 semua remaja maupun anak kecil perempuan menyukai permainan Candy
Crush
Kita dapat mende…nisikan formula logika predikat:
1 LovesFIFA16 (x) := TeenBoy (x) _ LittleBoy (x)
2 LovesCandyCrush (x) := TeenGirl (x) _ LittleGirl (x)
Kedua formula tersebut dapat ditranslasikan ke dalam Prolog menjadi:
Predikat Parent (x; y) menyatakan bahwa “x adalah orang tua y”. Kita dapat
membuat predikat Child (x; y) yang menyatakan bahwa “x adalah anak dari y”.
Predikat Child (x; y) dapat dide…nisikan memakai predikat Parent (x; y) yang
sudah ada sebelumnya. Perhatikan bahwa
Predikat Parent (x; y) menyatakan bahwa “x adalah orang tua y”. Kita dapat
membuat predikat Child (x; y) yang menyatakan bahwa “x adalah anak dari y”.
Predikat Child (x; y) dapat dide…nisikan memakai predikat Parent (x; y) yang
sudah ada sebelumnya. Perhatikan bahwa
Predikat Parent (x; y) menyatakan bahwa “x adalah orang tua y”. Kita dapat
membuat predikat Child (x; y) yang menyatakan bahwa “x adalah anak dari y”.
Predikat Child (x; y) dapat dide…nisikan memakai predikat Parent (x; y) yang
sudah ada sebelumnya. Perhatikan bahwa
Predikat Parent (x; y) menyatakan bahwa “x adalah orang tua y”. Kita dapat
membuat predikat Child (x; y) yang menyatakan bahwa “x adalah anak dari y”.
Predikat Child (x; y) dapat dide…nisikan memakai predikat Parent (x; y) yang
sudah ada sebelumnya. Perhatikan bahwa
Predikat Parent (x; y) menyatakan bahwa “x adalah orang tua y”. Kita dapat
membuat predikat Child (x; y) yang menyatakan bahwa “x adalah anak dari y”.
Predikat Child (x; y) dapat dide…nisikan memakai predikat Parent (x; y) yang
sudah ada sebelumnya. Perhatikan bahwa
Jadi kita dapat mende…nisikan Child (x; y) := Parent (y; x). Pada Prolog hal ini
dapat dilakukan dengan mudah sebagai berikut.
Predikat Parent (x; y) menyatakan bahwa “x adalah orang tua y”. Kita dapat
membuat predikat Child (x; y) yang menyatakan bahwa “x adalah anak dari y”.
Predikat Child (x; y) dapat dide…nisikan memakai predikat Parent (x; y) yang
sudah ada sebelumnya. Perhatikan bahwa
Jadi kita dapat mende…nisikan Child (x; y) := Parent (y; x). Pada Prolog hal ini
dapat dilakukan dengan mudah sebagai berikut.
child(X,Y):- parent(Y,X).
Latihan 1
Latihan
1 Diberikan domain D dan predikat Parent (x; y) : “x adalah orang tua dari
y”, Male (x) : “x adalah laki-laki”, dan Female (x) : “x adalah perempuan”.
Hanya dengan memakai predikat-predikat ini, berikan de…nisi untuk predikat
Father (x; y) dan Mother (x; y), predikat Father (x; y) berarti “x adalah ayah
dari y” dan predikat Mother (x; y) berarti “x adalah ibu dari y”.
2 Gunakan hasil pada nomor 1 untuk mende…nisikan father(X,Y) dan
mother(X,Y) pada Prolog.
Solusi:
Latihan 1
Latihan
1 Diberikan domain D dan predikat Parent (x; y) : “x adalah orang tua dari
y”, Male (x) : “x adalah laki-laki”, dan Female (x) : “x adalah perempuan”.
Hanya dengan memakai predikat-predikat ini, berikan de…nisi untuk predikat
Father (x; y) dan Mother (x; y), predikat Father (x; y) berarti “x adalah ayah
dari y” dan predikat Mother (x; y) berarti “x adalah ibu dari y”.
2 Gunakan hasil pada nomor 1 untuk mende…nisikan father(X,Y) dan
mother(X,Y) pada Prolog.
Solusi:
1 Father (x; y) := Parent (x; y) ^ Male (x) dan
Mother (x; y) := Parent (x; y) ^ Female (x). Hal ini terjadi karena ayah
adalah orang tua laki-laki dan ibu adalah orang tua perempuan.
Latihan 1
Latihan
1 Diberikan domain D dan predikat Parent (x; y) : “x adalah orang tua dari
y”, Male (x) : “x adalah laki-laki”, dan Female (x) : “x adalah perempuan”.
Hanya dengan memakai predikat-predikat ini, berikan de…nisi untuk predikat
Father (x; y) dan Mother (x; y), predikat Father (x; y) berarti “x adalah ayah
dari y” dan predikat Mother (x; y) berarti “x adalah ibu dari y”.
2 Gunakan hasil pada nomor 1 untuk mende…nisikan father(X,Y) dan
mother(X,Y) pada Prolog.
Solusi:
1 Father (x; y) := Parent (x; y) ^ Male (x) dan
Mother (x; y) := Parent (x; y) ^ Female (x). Hal ini terjadi karena ayah
adalah orang tua laki-laki dan ibu adalah orang tua perempuan.
2 Kita memiliki father(X,Y):- parent(X,Y),male(X) dan
mother(X,Y):- parent(X,Y),female(X).
Bahasan
8 Tugas Kelompok
Contoh
Contoh
Kita telah melihat aturan gentleman(X):- male(X),adult(X). Dalam logika
predikat, aturan ini dapat ditranslasikan sebagai
Male (x) ^ Adult (x) ! Gentleman (x). Karena X merupakan variabel yang
muncul pada kepala/ hheadi suatu klausa, maka X diikat dengan kuantor
universal. Ini berarti aturan gentleman(X):- male(X),adult(X) dapat
dinyatakan sebagai formula 8x (Male (x) ^ Adult (x) ! Gentleman (x)).
MZI (FIF Tel-U) Pemrograman Logika November 2015 54 / 69
Representasi Kuantor pada Prolog
Kemudian
child(X,Y):- parent(Y,X) dapat dinyatakan sebagai
Kemudian
child(X,Y):- parent(Y,X) dapat dinyatakan sebagai
8x8y (Parent (y; x) ! Child (x; y))
father(X,Y):- parent(X,Y),male(X) dapat dinyatakan sebagai
Kemudian
child(X,Y):- parent(Y,X) dapat dinyatakan sebagai
8x8y (Parent (y; x) ! Child (x; y))
father(X,Y):- parent(X,Y),male(X) dapat dinyatakan sebagai
8x8y (Parent (x; y) ^ Male (x) ! Father (x; y))
mother(X,Y):- parent(X,Y),female(X) dapat dinyatakan sebagai
Kemudian
child(X,Y):- parent(Y,X) dapat dinyatakan sebagai
8x8y (Parent (y; x) ! Child (x; y))
father(X,Y):- parent(X,Y),male(X) dapat dinyatakan sebagai
8x8y (Parent (x; y) ^ Male (x) ! Father (x; y))
mother(X,Y):- parent(X,Y),female(X) dapat dinyatakan sebagai
8x8y (Parent (x; y) ^ Female (x) ! Mother (x; y))
grandparent(X,Y):-
grandparent(X,Y):- parent(X,Z),parent(Z,Y).
grandparent(X,Y):- parent(X,Z),parent(Z,Y).
adalah
grandparent(X,Y):- parent(X,Z),parent(Z,Y).
adalah
8x8y (9z (Parent (x; z) ^ Parent (z; y)) ! Grandparent (x; y)) atau
8x8y9z (Parent (x; z) ^ Parent (z; y) ! Grandparent (x; y)) .
?- grandparent(Grandparent,Grandkid).
?- grandparent(Grandparent,Grandkid).
Grandparent = alice,
Grandkid = fiona ;
?- grandparent(Grandparent,Grandkid).
Grandparent = alice,
Grandkid = fiona ;
Grandparent = alice,
Grandkid = grace ;
..
. [ada cukup banyak keluaran]
?- grandparent(Grandparent,Grandkid).
Grandparent = alice,
Grandkid = fiona ;
Grandparent = alice,
Grandkid = grace ;
..
. [ada cukup banyak keluaran]
Grandparent = charlie,
Grandkid = kelly;
Variabel Singleton
Has-a-Child (x) :=
Variabel Singleton
Variabel Singleton
Atau dalam bentuk implikasi 8x (9y (Parent (x; y) ! Has-a-Child (x))). Jika hal
ini ditranslasikan ke Prolog secara langsung, maka kita memiliki skrip
Variabel Singleton
Atau dalam bentuk implikasi 8x (9y (Parent (x; y) ! Has-a-Child (x))). Jika hal
ini ditranslasikan ke Prolog secara langsung, maka kita memiliki skrip
has_a_child(X):- parent(X,Y).
Skrip di atas tidak dapat dikompilasi oleh SWI-Prolog, SWI-Prolog akan
mengeluarkan peringatan: Singleton variables: [Y].
has_a_child(X):- parent(X,_Y).
2 Berikan penjelasan tambahkan terkait variabel singleton yang tidak
mengubah makna deklaratif dari klausa yang dibentuk. Karena domain untuk
Y adalah manusia dan Y dapat pasti memenuhi salah satu di antara male(Y)
atau female(Y), maka skrip untuk has_a_child(X) menjadi:
has_a_child(X):- parent(X,_Y).
2 Berikan penjelasan tambahkan terkait variabel singleton yang tidak
mengubah makna deklaratif dari klausa yang dibentuk. Karena domain untuk
Y adalah manusia dan Y dapat pasti memenuhi salah satu di antara male(Y)
atau female(Y), maka skrip untuk has_a_child(X) menjadi:
has_a_child(X):- parent(X,Y),(male(Y);female(Y)).
Skrip ini memiliki representasi formula logika predikat berikut:
has_a_child(X):- parent(X,_Y).
2 Berikan penjelasan tambahkan terkait variabel singleton yang tidak
mengubah makna deklaratif dari klausa yang dibentuk. Karena domain untuk
Y adalah manusia dan Y dapat pasti memenuhi salah satu di antara male(Y)
atau female(Y), maka skrip untuk has_a_child(X) menjadi:
has_a_child(X):- parent(X,Y),(male(Y);female(Y)).
Skrip ini memiliki representasi formula logika predikat berikut:
8x (9yParent (x; y) ^ (Male (y) _ Female (y)) ! Has-a-Child (x)).
MZI (FIF Tel-U) Pemrograman Logika November 2015 61 / 69
Representasi Kuantor pada Prolog
Latihan 2
Latihan
1 Diberikan domain D, predikat Father (x; y) : “x adalah ayah dari y”, dan
predikat Mother (x; y) : “x adalah ibu dari y”. Hanya dengan memakai
predikat-predikat ini, berikan de…nisi untuk predikat Is-a-Daddy(x) dan
Is-a-Mommy(x), predikat Is-a-Daddy(x) berarti “x adalah seorang ayah”
dan predikat Is-a-Mommy(x) berarti “x adalah seroang ibu”.
2 Gunakan hasil pada nomor 1 untuk mende…nisikan is_a_daddy(X) dan
is_a_mommy(X) pada Prolog.
Solusi:
Solusi:
1 Is-a-Daddy(x) := 9yFather (x; y) dan Is-a-Mommy(x) := 9yMother (x; y).
Solusi:
1 Is-a-Daddy(x) := 9yFather (x; y) dan Is-a-Mommy(x) := 9yMother (x; y).
2 Kita memiliki
is_a_daddy(X):- father(X,_Y) dan
is_a_mommy(X):- mother(X,_Y).
Pende…nisian dapat pula dilakukan sebagai:
Solusi:
1 Is-a-Daddy(x) := 9yFather (x; y) dan Is-a-Mommy(x) := 9yMother (x; y).
2 Kita memiliki
is_a_daddy(X):- father(X,_Y) dan
is_a_mommy(X):- mother(X,_Y).
Pende…nisian dapat pula dilakukan sebagai:
is_a_daddy(X):- father(X,Y),(male(Y),female(Y)) dan
is_a_mommy(X):- mother(X,Y),(male(Y),female(Y)).
Bahasan
8 Tugas Kelompok
Sibling(x; y) berarti
sibling(X,Y):-
parent(Z,X), % Z adalalah orang tua dari X
parent(Z,Y), % Z adalah orang tua dari Y
X n== Y. % X dan Y adalah orang yang berbeda
Bahasan
8 Tugas Kelompok
Tugas Kelompok
Pada bagan silsilah keluarga yang diberikan, warna merah muda merepresentasikan
orang dengan jenis kelamin perempuan dan warna biru merepresentasikan orang
dengan jenis kelamin laki-laki. Garis tipis adalah hubungan darah (saudara atau
orang tua – anak), garis tebal adalah hubungan pernikahan.
Tugas
Buatlah skrip program dalam Prolog (ekstensi .pl).
1 Tuliskan fakta pada Prolog yang menjelaskan jenis kelamin semua orang yang
ada pada bagan silsilah keluarga yang telah diberikan. Gunakan predikat
male(...) dan female(...). Predikat male(X) berarti X adalah laki-laki
dan predikat female(X) berarti X adalah perempuan.
2 Tuliskan fakta pada Prolog yang menjelaskan hubungan anak-orang tua
(parent-child) yang ada pada bagan silsilah keluarag yang telah diberikan.
Gunakan predikat parent(...,...). Predikat parent(X,Y) berarti X
adalah orang tua dari Y.
3 Instruksi selanjutnya tunggu dari pengajar kelas masing-masing. Untuk kelas
38-05 dan 38-06 silakan lihat idea.
MZI (FIF Tel-U) Pemrograman Logika November 2015 69 / 69