Anda di halaman 1dari 14

TUGAS KECERDASAN BUATAN

FINAL PROJECT
“​APLIKASI SWI-PROLOG TENTANG SILSILAH KELUARGA​”

Disusun oleh:
M.Chandra Cahyo (105090605111003)
Maulana Shalihin (105090600111039)
Agus Hariono (105090600111045)
Rezza Hary Dwi Satriya (105090607111005)

PRODI ILMU KOMPUTER


PROGRAM TEKNOLOGI INFORMASI DAN ILMU KOMPUTER
UNIVERSITAS BRAWIJAYA
MALANG
2012
APLIKASI SWI-PROLOG TENTANG SILSILAH KELUARGA

● Contoh aplikasi prolog yang sering kita temukan yaitu tentang pengenalan
dalam silsilah keluarga. Misal sebagai berikut:
Yuda dan Nina adalah sepasang suami istri dan mempunyai empat anak yang terdiri dari
tiga laki-laki dan satu perempuan, yaitu anak pertama adalah Rico, anak kedua adalah
Ambar, anak ketiga adalah Tatang, dan anak keempat adalah Joko. Ke empat anak tersebut
masing-masih sudah berkeluarga dan memiliki anak. Rico menikah dengan Dina dan
mempunyai lima anak yang terdiri dari dua laki-laki dan tiga perempuan, yaitu anak
pertama adalah Budi, anak kedua adalah Ani, anak ketiga adalah Rani, anak keempat
adalah Ajeng, dan anak kelima adalah Danang. Lalu anak kedua dari Yuda dan Nina yang
bernama Ambar menikah dengan Hari dan mempunyai empat anak yang terdiri dari satu
laki-laki dan tiga perempuan, yaitu anak pertama adalah Ika, anak kedua adalah Tuti, anak
ketiga adalah Rudi, dan anak keempat adalah Ana. Lalu anak ketiga dari Yuda dan Nina
bernama Tatang menikah dengan Yani dan mempunyai tiga anak yang terdiri dari dua
laki-laki dan satu perempuan, yaitu anak pertama adalah Eko, anak kedua adalah Dita, dan
anak ketiga adalah Tedi. Sedangkan anak keempat dari Yuda dan Nina bernama Joko yang
menikah dengan Endah dan mempunyai empat anak yang terdiri dari tiga laki-laki dan
satu perempuan, yaitu anak pertama adalah Adi, anak kedua adalah Nana, anak ketiga
adalah Rifki, dan anak keempat adalah Antok. Serta Budi menikah dengan Mila dan
mempunyai dua anak yang terdiri dari satu laki-laki dan satu perempuan yaitu Anton dan
Tina.
Keterangan di atas dapat digambarkan sebagai berikut:
● Kode prolog untuk silsilah keluarga di atas dapat dituliskan sebagai berikut:
Fakta (Fact):
laki_laki(yuda).
laki_laki(rico).
laki_laki(hari).
laki_laki(tatang).
laki_laki(joko).
laki_laki(budi).
laki_laki(danang).
laki_laki(rudi).
laki_laki(eko).
laki_laki(tedi).
laki_laki(adi).
laki_laki(rifki).
laki_laki(antok).
laki_laki(anton).

istri(yuda,nina).
istri(rico,dina).
istri(hari,ambar).
istri(tatang,yani).
istri(joko,endah).
istri(budi,mila).

anak(yuda,rico).
anak(yuda,ambar).
anak(yuda,tatang).
anak(yuda,joko).
anak(rico,budi).
anak(rico,ani).
anak(rico,ajeng).
anak(rico,rani).
anak(rico,danang).
anak(hari,ika).
anak(hari,tuti).
anak(hari,rudi).
anak(hari,ana).
anak(tatang,eko).
anak(tatang,dita).
anak(tatang,tedi).
anak(joko,adi).
anak(joko,nana).
anak(joko,rifki).
anak(joko,antok).
anak(budi,anton).
anak(budi,tina).

anak(nina,rico).
anak(nina,ambar).
anak(nina,tatang).
anak(nina,joko).
anak(dina,budi).
anak(dina,ani).
anak(dina,ajeng).
anak(dina,rani).
anak(dina,danang).
anak(ambar,ika).
anak(ambar,tuti).
anak(ambar,rudi).
anak(ambar,ana).
anak(yani,eko).
anak(yani,dita).
anak(yani,tedi).
anak(endah,adi).
anak(endah,nana).
anak(endah,rifki).
anak(endah,antok).
anak(mila,anton).
anak(mila,tina).

Aturan (Rule):
anak(A,C) :- istri(B,A), anak(B,C).

perempuan(A) :- not(laki_laki(A)).

suami(A,B) :- istri(B,A).
menikah(A,B) :- istri(A,B);
istri(B,A).

orang_tua(A,B) :- anak(B,A).
orang_tua(A,B,C) :- anak(B,A), istri(B,C).
ayah(A,B) :- anak(B,A), laki_laki(B).
ibu(A,C) :- anak(C,A), not(laki_laki(C)).

anak_laki_laki(A,B) :- anak(A,B), laki_laki(B).


anak_perempuan(A,B) :- anak(A,B), not(laki_laki(B)).

saudara_kandung(A,F) :- anak(B,A), anak(B,F), (F) \== (A).


saudara_kandung_laki_laki(A,H) :- anak(B,A), anak(B,H), (H) \== (A), laki_laki(H).
saudara_kandung_perempuan(A,G) :- anak(B,A), anak(B,G), (G) \== (A),
not(laki_laki(G)).

paman(A,F) :- anak(B,A), anak(C,B), laki_laki(C), anak(C,F), (F) \== (B), laki_laki(F);


anak(B,A), anak(C,B), laki_laki(C), anak(C,E), (E) \== (B), istri(F,E).
bibi(A,F) :- anak(B,A), anak(C,B), laki_laki(C), anak(C,F), (F) \== (B), not(laki_laki(F));
anak(B,A), anak(C,B), laki_laki(C), anak(C,E), (E) \== (B), istri(E,F).

saudara_sepupu(A,G) :- anak(B,A), anak(C,B), laki_laki(C), anak(C,D), (D) \== (B),


anak(D,G).
saudara_sepupu_laki_laki(A,G) :- anak(B,A), anak(C,B), laki_laki(C), anak(C,D), (D)
\== (B), anak(D,G), laki_laki(G).
saudara_sepupu_perempuan(A,G) :- anak(B,A), anak(C,B), laki_laki(C), anak(C,D), (D)
\== (B), anak(D,G), not(laki_laki(G)).

kakek(A,C) :- anak(B,A), anak(C,B), laki_laki(C).


nenek(A,C) :- anak(B,A), anak(C,B), not(laki_laki(C)).

cucu(A,C) :- anak(A,B), anak(B,C).


cucu_laki_laki(A,C) :- anak(A,B), anak(B,C), laki_laki(C).
cucu_perempuan(A,C) :- anak(A,B), anak(B,C), not(laki_laki(C)).

buyut(A,D) :- anak(B,A), anak(C,B), anak(D,C).


buyut_laki_laki(A,D) :- anak(B,A), anak(C,B), anak(D,C), laki_laki(D).
buyut_perempuan(A,D) :- anak(B,A), anak(C,B), anak(D,C), not(laki_laki(D)).

cicit(A,D) :- anak(A,B), anak(B,C), anak(C,D).


cicit_laki_laki(A,D) :- anak(A,B), anak(B,C), anak(C,D), laki_laki(D).
cicit_perempuan(A,D) :- anak(A,B), anak(B,C), anak(C,D), not(laki_laki(D)).

● Penjelasan dari kode prolog untuk silsilah keluarga di atas yaitu :


1. laki_laki(yuda).
Maksudnya bahwa yuda adalah laki-laki.

2. istri(yuda,nina).
Maksudnya bahwa istri yuda adalah nina.
3. anak(yuda,rico).
Maksudnya bahwa anak yuda adalah rico.

4. perempuan(A) :- not(laki_laki(A)).
Maksudnya bahwa perempuan bukanlah laki-laki

5. suami(A,B) :- istri(B,A).
Maksudnya bahwa suami kebalikan dari istri yaitu suami A adalah B dimana istri B
adalah A.

6. menikah(A,B) :- istri(A,B); istri(B,A).


Maksudnya bahwa A dan B menikah dimana istri A adalah B atau istri B adalah A.

7. orang_tua(A,B) :- anak(B,A).
Maksudnya bahwa orang-tua kebalikan dari anak yaitu orang-tua A adalah B dimana
anak B adalah A.

8. orang_tua(A,B,C) :- anak(B,A), istri(B,C).


Maksudnya bahwa orang-tua A adalah B dan C dimana anak B adalah A dan istri B
adalah C.

9. ayah(A,B) :- anak(B,A), laki_laki(B).


Maksudnya bahwa ayah A adalah B dimana sama seperti orang_tua(A,B) hanya saja
B adalah laki-laki.

10. ibu(A,C) :- anak(C,A), not(laki_laki(C)).


Maksudnya bahwa ayah A adalah C dimana sama seperti orang_tua(A,C) hanya saja
C bukan laki-laki.

11. anak_laki_laki(A,B) :- anak(A,B), laki_laki(B).


Maksudnya bahwa anak laki-laki A adalah B dimana anak A adalah B dan B adalah
laki-laki.
12. anak_perempuan(A,B) :- anak(A,B), not(laki_laki(B)).
Maksudnya bahwa anak perempuan A adalah B dimana anak A adalah B dan B bukan
laki-laki.

13. saudara_kandung(A,F) :- anak(B,A), anak(B,F), (F) \== (A).


Maksudnya bahwa saudara kandung A adalah F dimana A adalah anak B dan F adalah
anak B dan F bukanlah A.

14. saudara_kandung_laki_laki(A,H) :- anak(B,A), anak(B,H), (H) \== (A), laki_laki(H).


Maksudnya bahwa saudara kandung A adalah H dimana A adalah anak B dan H
adalah anak B dan H bukanlah A dan H adalah laki-laki.

15. saudara_kandung_perempuan(A,G) :- anak(B,A), anak(B,G), (G) \== (A),


not(laki_laki(G)).
Maksudnya bahwa saudara kandung A adalah G dimana A adalah anak B dan G
adalah anak B dan G bukanlah A dan G bukan laki-laki.

16. paman(A,F) :- anak(B,A), anak(C,B), laki_laki(C), anak(C,F), (F) \== (B),


laki_laki(F); anak(B,A), anak(C,B), laki_laki(C), anak(C,E), (E) \== (B), istri(F,E).
Maksudnya bahwa paman A adalah F dimana A adalah anak B dan B adalah anak C
dan anak C adalah F dan F bukanlah B dan F adalah laki-laki atau A adalah anak B
dan B adalah anak C dan anak C adalah E dan E bukanlah B dan E adalah istri F.

17. bibi(A,F) :- anak(B,A), anak(C,B), laki_laki(C), anak(C,F), (F) \== (B),


not(laki_laki(F)); anak(B,A), anak(C,B), laki_laki(C), anak(C,E), (E) \== (B),
istri(E,F).
Maksudnya bahwa bibi A adalah F dimana A adalah anak B dan B adalah anak C dan
anak C adalah F dan F bukanlah B dan F bukan laki-laki atau A adalah anak B dan B
adalah anak C dan anak C adalah E dan E bukanlah B dan istri E adalah F.

18. saudara_sepupu(A,G) :- anak(B,A), anak(C,B), laki_laki(C), anak(C,D), (D) \== (B),


anak(D,G).
Maksudnya bahwa saudara sepupu A adalah G dimana A adalah anak B dan B adalah
anak C dan anak C adalah D dan D bukanlah B dan anak D adalah G.

19. saudara_sepupu_laki_laki(A,G) :- anak(B,A), anak(C,B), laki_laki(C), anak(C,D),


(D) \== (B), anak(D,G), laki_laki(G).
Maksudnya bahwa saudara sepupu laki-laki A adalah G dimana sama seperti
saudara_sepupu(A,G) hanya saja G adalah laki-laki.

20. saudara_sepupu_perempuan(A,G) :- anak(B,A), anak(C,B), laki_laki(C), anak(C,D),


(D) \== (B), anak(D,G), not(laki_laki(G)).
Maksudnya bahwa saudara sepupu perempuan A adalah G dimana sama seperti
saudara_sepupu(A,G) hanya saja G bukan laki-laki.

21. kakek(A,C) :- anak(B,A), anak(C,B), laki_laki(C).


Maksudnya bahwa kakek A adalah C dimana A adalah anak B dan B adalah anak C
dan C adalah laki-laki.

22. nenek(A,C) :- anak(B,A), anak(C,B), not(laki_laki(C)).


Maksudnya bahwa kakek A adalah C dimana A adalah anak B dan B adalah anak C
dan C adalah laki-laki.

23. cucu(A,C) :- anak(A,B), anak(B,C).


Maksudnya bahwa cucu A adalah C dimana anak A adalah B dan anak B adalah C.

24. cucu_laki_laki(A,C) :- anak(A,B), anak(B,C), laki_laki(C).


Maksudnya bahwa cucu laki-laki A adalah C dimana sama seperti cucu(A,C) hanya
saja C adalah laki-laki.

25. cucu_perempuan(A,C) :- anak(A,B), anak(B,C), not(laki_laki(C)).


Maksudnya bahwa cucu perempuan A adalah C dimana sama seperti cucu(A,C) hanya
saja C bukan laki-laki.
26. buyut(A,D) :- anak(B,A), anak(C,B), anak(D,C).
Maksudnya bahwa buyut A adalah D dimana A adalah anak B dan B adalah anak C
dan C adalah anak D.

27. buyut_laki_laki(A,D) :- anak(B,A), anak(C,B), anak(D,C), laki_laki(D).


Maksudnya bahwa buyut laki-laki A adalah D dimana sama seperti buyut(A,D) hanya
saja D adalah laki-laki

28. buyut_perempuan(A,D) :- anak(B,A), anak(C,B), anak(D,C), not(laki_laki(D)).


Maksudnya bahwa buyut perempuan A adalah D dimana sama seperti buyut(A,D)
hanya saja D bukan laki-laki

29. cicit(A,D) :- anak(A,B), anak(B,C), anak(C,D).


Maksudnya bahwa cicit A adalah D dimana kebalikan dari buyut yaitu buyut(D,A).

30. cicit_laki_laki(A,D) :- anak(A,B), anak(B,C), anak(C,D), laki_laki(D).


Maksudnya bahwa cicit laki-laki A adalah D dimana sama seperti cicit(A,D) hanya
saja D adalah laki-laki.

31. cicit_perempuan(A,D) :- anak(A,B), anak(B,C), anak(C,D), not(laki_laki(D)).


Maksudnya bahwa cicit perempuan A adalah D dimana sama seperti cicit(A,D) hanya
saja D bukan laki-laki.

● Syntax dan penjelasan input-output dari prolog silsilah keluarga di atas, sebagai
berikut:
1. Untuk menanyakan Yuda menikah dengan sapa, maka akan ditulis sebagai berikut: :
?- menikah(yuda,X).
X = nina
Output di atas menyatakan bahwa Yuda menikah dengan Nina. X=Nina.
2. Untuk menanyakan suami dari Nina, maka akan ditulis sebagai berikut :
?- suami(nina,X).
X = yuda.
atau
?- menikah(nina,X).
X = yuda​.
Output di atas menyatakan bahwa Nina menikah dengan Yuda atau Nina mempunyai
suami yaitu Yuda. X=Yuda.
3. Untuk menanyakan anak dari Yuda dan Nina, maka akan ditulis sebagai berikut :
?- anak(yuda,X).
X = rico .
atau
?- anak(nina,X).
X = rico
Output di atas menyatakan bahwa anak dari Nina adalah Rico serta anak dari Yuda
adalah Rico. X=Rico.
4. Untuk menanyakan anak perempuan dari Yuda dan Nina, maka akan ditulis sebagai
berikut :
?- anak_perempuan(yuda,X).
X = ambar .
atau
?- anak_perempuan(nina,X).
X = ambar
Output di atas menyatakan bahwa anak perempuan dari Nina adalah Ambar serta anak
perempuan dari Yuda adalah Ambar. X=Ambar.
5. Untuk menanyakan apakah Joko adalah anak laki-laki dari Yuda dan Nina, maka akan
ditulis sebagai berikut :
?- anak_laki_laki(yuda,joko).
true .
atau
?- anak_laki_laki(nina,joko).
true
Output di atas menyatakan bahwa Joko merupakan anak laki-laki dari Yuda dan Nina.
True.
6. Untuk menanyakan orang tua dari Rico, maka akan ditulis sebagai berikut :
?- orang_tua(rico,X,Y).
X = yuda,
Y = nina .
Output di atas menyatakan bahwa orang tua dari Rico adalah Yuda dan Nina. X=yuda
Y=nina.
7. Untuk menanyakan ayah dari Ika, maka akan ditulis sebagai berikut :
?- ayah(ika,X).
X = hari
Output di atas menyatakan bahwa ayah dari Ika adalah Hari. X=hari.
8. Untuk menanyakan ibu dari Ika, maka akan ditulis sebagai berikut :
?- ibu(ika,X).
X = ambar
Output di atas menyatakan bahwa ibu dari Ika adalah Ambar. X=ambar.
9. Untuk menanyakan saudara kandung perempuan dari Ana, maka akan dirulis sebagai
berikut :
?- saudara_kandung_perempuan(ana,X).
X = ika
Output di atas menyatakan bahwa saudara kandung perempuan Ana adalah Ika.
X=ika.
10. Untuk menanyakan saudara kandung laki-laki dari Ana, maka akan dirulis sebagai
berikut :
?- saudara_kandung_laki_laki(ana,X).
X = rudi
Output di atas menyatakan bahwa saudara kandung laki-laki Ana adalah Rudi.
X=rudi.
11. Untuk menanyakan paman dari Tedi, maka akan ditulis sebagai berikut :
?- paman(tedi,X).
X = rico
Output di atas menyatakan bahwa paman Tedi yaitu Rico.X=rico.
12. Untuk menanyakan bibi dari Eko, maka akan ditulis sebagai berikut :
?- bibi(eko,X).
X = ambar
Output di atas menyatakan bahwa bibi Eko yaitu Ambar.X=ambar.
13. Untuk menanyakan saudara sepupu perempuan dari Antok, maka akan ditulis sebagai
berikut :
?- saudara_sepupu_perempuan(antok,X).
X = ani
Output di atas menyatakn bahwa saudara sepupu perempuan dari Antok yaitu Ani.
X=ani.
14. Untuk menanyakan saudara sepupu laki-laki dari Antok, maka akan ditulis sebagai
berikut :
?- saudara_sepupu_laki_laki(antok,X).
X = budi
Output di atas menyatakn bahwa saudara sepupu laki-laki dari Antok yaitu Budi.
X=budi.
15. Untuk menanyakan kakek dari Tina, maka akan ditulis sebagai berikut :
?- kakek(tina,X).
X = rico .
Output di atas menyatakan bahwa kakek Tina adalah Rico. X=rico.
16. Untuk menanyakan nenek dari Anton, maka akan ditulis sebagai berikut :
?- nenek(anton,X).
X = dina .
Output di atas menyatakan bahwa nenek Anton adalah Dina. X=dina.
17. Untuk menanyakan cucu_laki_laki dari Yuda, maka akan ditulis sebagai berikut :
?- cucu_laki_laki(yuda,X).
X = budi .
Output di atas menyatakan bahwa cucu laki-laki dari Yuda adalah Budi. X=budi.
18. Untuk menanyakan cucu_perempuan dari Nina, maka akan ditulis sebagai berikut :
?- cucu_perempuan(nina,X).
X = ani .
Output di atas menyatakan bahwa cucu perempuan dari Nina adalah Ani. X=ani.
19. Unutk menanyakan buyut laki-laki dari Anton, maka akan ditulis sebagai berikut :
?- buyut_laki_laki(anton,X).
X = yuda .
Output di atas menyatakan bahwa buyut laki-laki dari Anton adalah Yuda. X=yuda.
20. Unutk menanyakan buyut perempuan dari Tina, maka akan ditulis sebagai berikut :
?- buyut_perempuan(tina,X).
X = nina .
Output di atas menyatakan buyut perempuan dari Tina adalah Nina. X=nina.
21. Unutk menanyakan cicit laki-laki dari Yuda, maka akan ditulis sebagai berikut :
?- cicit_laki_laki(yuda,X).
X = anton .
Output di atas menyatakan bahwa cicit laki-laki dari Yuda adalah Anton. X=anton.
22. Unutk menanyakan cicit perempuan dari Nina, maka akan ditulis sebagai berikut :
?- cicit_perempuan(nina,X).
X = tina
 Output di atas menyatakan bahwa cicit perempuan dari Nina adalah Tina. X=tina.

Anda mungkin juga menyukai