Anda di halaman 1dari 7

APLIKASI PROLOG PADA KASUS SILSILAH KELUARGA Oleh: Rahayuni Wasisarini Website: http://rahayuni.com/ E-mail: mail@rahayuni.

com Programming in Logic atau yang sering disingkat prolog merupakan bahasa pemrograman untuk komputasi simbolik, bukan numerik. Prolog cocok untuk mengatasi problem yang melibatkan objek dan hubungan antara objek-objek tersebut (Bratko, 1991). Perbedaan operator logika dengan Prolog: Operator Logika Prolog , ; : Not Prolog interpreter yang digunakan adalah SWI prolog (free), mendapatkannya dapat didownload di http://www.swiprolog.org/ untuk

Contoh aplikasi prolog yang umum adalah pada kasus silsilah keluarga. Nah, misalnya sebuah keluarga memiliki silsilah sebagai berikut:

YUDA

NINA

RICO

DINA

AMBAR IKA TUTI RUDI ANA

HARI

TATANG EKO DITA TEDI

YANI

JOKO

ENDAH

BUDI ANI RANI AJENG DANANG

ADI NANA RIFKI ANTOK

Kode prolog untuk silsilah keluarga di atas dapat dituliskan sebagai berikut: Fakta (Fact): married(yuda,nina). married(rico,dina). married(hari,ambar). married(tatang,yani). Page 1 of 7

married(joko,endah). child(rico,yuda). child(ambar,yuda). child(tatang,yuda). child(joko,yuda). child(budi,rico). child(ani,rico). child(ajeng,rico). child(rani,rico). child(danang,rico). child(ika,hari). child(tuti,hari). child(rudi,hari). child(ana,hari). child(eko,tatang). child(dita,tatang). child(tedi,tatang). child(adi,joko). child(nana,joko). child(rifki,joko). child(antok,joko). male(yuda). male(rico). male(hari). male(tatang). male(joko). male(budi). male(danang). male(rudi). male(eko). male(tedi). male(adi). male(rifki). male(antok).

Aturan (Rule): parents(A,B,C) :-child(A,B),married(B,C). grandparents(A,D,E) :-child(A,B),child(B,D),married(D,E). grandparents(A,D,E) :child(A,B),married(B,C),child(C,D),married(D,E). sibling(A,F) :-child(A,B), child(F,B), (F) \== (A). sister(A,G):-child(A,B), child(G,B), (G) \== (A), not(male(G)). brother(A,H):-child(A,B), child(H,B), (H) \== (A), male(H).

Page 2 of 7

Contoh input-output dalam SWI prolog: 1 ?- consult('silsilah.pl'). % silsilah.pl compiled 0.00 sec, 5,580 bytes true. 2 ?- married(yuda,X). X = nina. 3 ?- child(rico,X). X = yuda. 4 ?- parents(nana,X,Y). X = joko, Y = endah. 5 ?- grandparents(rudi,X,Y). X = yuda, Y = nina. 6 X X X X ?- sibling(danang,X). = budi ; = ani ; = ajeng ; = rani .

7 ?- sister(ana,X). X = ika ; X = tuti . 8 ?- sister(dita,X). false. 9 ?- brother(tedi,X). X = eko . 10 ?- brother(rudi,X). false.

Penjelasan program: 1. A menikah dengan B, married(A,B). married(yuda,nina). married(rico,dina). married(hari,ambar). married(tatang,yani). married(joko,endah).

maka

dalam

prolog

dapat

ditulis

dengan

Page 3 of 7

2.

A adalah anak B, maka dalam prolog dapat ditulis dengan child(A,B). child(rico,yuda). child(ambar,yuda). child(tatang,yuda). child(joko,yuda). child(budi,rico). child(ani,rico). child(ajeng,rico). child(rani,rico). child(danang,rico). child(ika,hari). child(tuti,hari). child(rudi,hari). child(ana,hari). child(eko,tatang). child(dita,tatang). child(tedi,tatang). child(adi,joko). child(nana,joko). child(rifki,joko). child(antok,joko). A berjenis kelamin laki-laki, maka dalam prolog dapat ditulis male(A). male(yuda). male(rico). male(hari). male(tatang). male(joko). male(budi). male(danang). male(rudi). male(eko). male(tedi). male(adi). male(rifki). male(antok). A memiliki orang tua bernama B dan C, maka dalam prolog dapat ditulis: parents(A,B,C) :-child(A,B),married(B,C). Yakni jika A adalah anak B, dan B menikah dengan C maka orang tua A adalah B, C.

3.

4.

5.

A memiliki kakek nenek bernama D dan E maka dalam prolog dapat ditulis: grandparents(A,D,E) :-child(A,B),child(B,D),married(D,E).

Page 4 of 7

Yakni jika A adalah anak B, dan B adalah anak D, dan D menikah dengan E maka kakek nenek A adalah D dan E. (untuk kasus anak Yuda dan Nina selain Ambar) grandparents(A,D,E) :child(A,B),married(B,C),child(C,D),married(D,E). Yakni jika A adalah anak B, dan B menikah dengan C, dan C adalah anak D, dan D menikah dengan E maka kakek nenek A adalah D dan E. (untuk kasus anak Yuda dan Nina adalah Ambar) 6. A memiliki saudara bernama F maka dapat ditulis: sibling(A,F) :-child(A,B), child(F,B), (F) \== (A). Artinya jika A adalah anak B, dan F adalah anak B, dan F tidak samadengan A maka saudara A adalah F. 7. A memiliki saudara perempuan bernama G, dalam prolog dapat ditulis: sister(A,G):-child(A,B), child(G,B), (G) \== (A), not(male(G)). Artinya jika A adalah anak B, dan G adalah anak B, dan G tidak samadengan A, dan G bukan laki-laki, maka saudara perempuan A adalah G. 8. A memiliki saudara laki-laki bernama H, dalam prolog dapat ditulis brother(A,H):-child(A,B), child(H,B), (H) \== (A), male(H). Jika A adalah anak B, dan H adalah anak B, dan H tidak samadengan A, dan H adalah laki-laki, maka saudara laki-laki A adalah H. 9. Consult adalah perintah untuk memanggil file dalam database prolog: 1 ?- consult('silsilah.pl'). % silsilah.pl compiled 0.00 sec, 5,580 bytes true. Output di atas menyatakan bahwa syntax pada file silsilah.pl sudah tidak ada yang salah. 10. Syntax untuk menanyakan Yuda menikah dengan siapa ditulis sebagi berikut: 2 ?- married(yuda,X). X = nina. Output di atas menyatakan bahwa Yuda menikah dengan Nina. X = nina.

Page 5 of 7

11. Syntax prolog untuk menanyakan Rico anak siapa ditulis dengan: 3 ?- child(rico,X). X = yuda. Output di atas berarti Rico adalah anak Yuda. X = yuda. 12. Siapa orang tua nana? Pertanyaan tersebut dalam prolog dapat ditulis dengan: 4 ?- parents(nana,X,Y). X = joko, Y = endah. Output di atas berarti orang tua Nana adalah Joko dan Endah. 13. Siapakah kakek nenek Rudi? Pertanyaan tersebut dalam prolog dapat ditulis dengan: 5 ?- grandparents(rudi,X,Y). X = yuda, Y = nina. Artinya, kakek dan nenek Rudi bernama Yuda dan Nina. 14. Siapakah saudara Danang? Pertanyaan tersebut dalam prolog dapat ditulis dengan: 6 ?- sibling(danang,X). X = budi ; X = ani ; X = ajeng ; X = rani . Saudara Danang bernama Budi, Ani, Ajeng, dan Rani. 15. Untuk menanyakan siapakah saudara perempuan Ana, dapat ditulis dengan: 7 ?- sister(ana,X). X = ika ; X = tuti . Saudara perempuan Ana adalah Ika dan Tuti. 16. Untuk menanyakan siapakah saudara perempuan Dita, dapat ditulis dengan: 8 ?- sister(dita,X). false.

Page 6 of 7

Output-nya adalah false pada kasus ini, false berarti Dita tidak memiliki saudara perempuan. Hal ini sesuai dengan bagan silisilah keluarga. 17. Untuk menanyakan siapakan saudara laki-laki tedi, dapat ditulis dengan: 9 ?- brother(tedi,X). X = eko . Saudara laki-laki Tedi adalah Eko. 18. Untuk menanyakan siapakah saudara laki-laki rudi, dapat ditulis dengan: 10 ?- brother(rudi,X). false. Output-nya adalah false pada kasus ini, false berarti Rudi tidak memiliki saudara laki-laki. Hal ini sesuai dengan bagan silisilah keluarga.

Page 7 of 7