Bonus Prolog 210614
November 12, 2018 | Author: Darma Sirait | Category: N/A
Short Description
Bonus...
Description
BONUS PROLOG
1. Perhatikan Perhatikan boneka boneka Rusia, Rusia, di mana boneka yang kecil tersimpan di dalam boneka yang besar seperti diagram berikut: Buatlah sebuah knowledge base berisi predikat langsungDalam/2 yang menyatakan boneka mana yang langsung ada di dalam boneka yang mana (mis. langsungDalam(katarina,olga)). Kemudian buatlah predikat rekursi dalam/2 yang menyatakan boneka mana (baik langsung atau tidak langsung) terdapat di dalam boneka mana. !isalnya "uery: ?- dalam(katarina,natasha).
#kan menghasilkan $awaban true sedangkan "uery: ?- dalam(olga, katarina).
#kan menghasilkan $awaban false.
%. !isalkan !isalkan kita kita memiliki memiliki knowledg knowledge e base berikut berikut:: keretaLangsung(forbach,saarbruecken). keretaLangsung(freyming,forbach). keretaLangsung(fahlquemont,stAvold). keretaLangsung(stAvold,forbach). keretaLangsung(saarbruecken,dudweiler). keretaLangsung(met,fahlquemont). keretaLangsung(nancy,met).
&ang &ang menyatakan kota kota mana yang dapat dicapai menggunakan kereta kereta api langsung. 'entu 'entu sa$a kita bisa mencapai menempuh lebih $auh dengan merangkaikan merangkaikan per$alanan kereta api yang langsung. Buatlah predikat predikat rekursi dapatDitempuh/2 yang menyatakan dua kota yang dapat ditempuh dengan dengan kereta api. !isalnya "uery: ?- da!at"item!uh(nancy, saarbruecken).
#kan di$awab true. *. !isalkan !isalkan kita memiliki memiliki knowledge knowledge base dengan dengan akta+akta akta+akta berikut: berikut: tran(satu,one). tran(dua,two).
tran(tiga,three). tran(em!at,four). tran(lima,five). tran(enam,si#). tran(tu$uh,seven). tran(dela!an,eight). tran(sembilan,nine).
Buatlah sebuah predikat listtran(I,E) yang mener$emahkan list angka bahasa ndonesia men$adi list yang bersesuaian dalam bahasa nggris. !isalnya: ?-listtran(%satu,sembilan,dua&,'). ' %one,nine,two&.
Program #nda $uga harus dapat beker$a sebaliknya. !isalnya $ika diberikan "uery: ?-listtran(',%one,seven,si#,two&). ' %satu,tu$uh,enam,dua&. Hint:
-ntuk men$awabnya, coba pikirkan Bagaimana cara mener$emahkan list angka yang kosong/0 nilah base case+nya. -ntuk list yang tidak kosong, mula+mula ter$emahkan head dari list, kemudian gunakan rekursi untuk mener$emahkan tail+nya. . Buatlah predikat gabung/3 yang argumennya adalah * buah list dan menggabungkan elemen dari kedua list pertama men$adi list ketiga seperti berikut: ?- gabung(%a,b,c&,%,*,+&,'). ' %a,,b,*,c,+& ?- gabung(%foo,bar,yi!,yu!&, %glub,glab,glib,glob&,asil). asil %foo,glub,bar,glab,yi!,glib,yu!,glob& Predikat gabung+ mirip dengan predikat a*b*, hanya bedanya menggunakan
tiga buah list dan bukan dua. Prinsipnya adalah melakukan sesuatu pada
head dari list+list tersebut, dan secara rekursi melakukan hal yang sama pada tail+nya. 2. Buatlah predikat duaKali(Masuk, Keluar) yang mana argumen kiri adalah sebuah list dan argumen kanan adalah list yang berisi setiap elemen dalam list yang kiri ditulis dua kali. !isalnya "uery: ?- duaali(%a,/,bingung&, ').
#kan di$awab: ' %a,a,/,/,bingung,bingung&.
#tau "uery: ?- duaali(%,*,,&,').
#kan di$awab:
' %,,*,*,,,,&.
3int: pikirkan apa yang ter$adi $ika argumen pertama adalah list kosong/ sebagai base+case. -ntuk list yang tidak kosong, pikirkan apa yang akan dilakukan terhadap head, dan gunakan rekursi terhadap tailnya. 4. Buatlah predikat umlah/3 di mana argumen ketiga adalah hasil pen$umlahan kedua argumen pertama. !isalnya $umlah(/,0,1) akan bernilai true tapi $umlah(/,2,*) akan bernilai false. 5. Buatlah predikat tambah!atu/2 di mana argumen pertamanya adalah list integer, dan argumen keduanya adalah list integer yang diperoleh dengan menambah 1 pada setiap integer pada list pertama. !isalnya "uery: ?- tambah3atu(%,*,4,*&, ').
#kan menghasilkan: ' %*,+,5,+&.
View more...
Comments