Bonus Prolog 210614

November 12, 2018 | Author: Darma Sirait | Category: N/A
Share Embed Donate


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: ?- duaali(%a,/,bingung&, ').

#kan di$awab: '  %a,a,/,/,bingung,bingung&.

#tau "uery: ?- duaali(%,*,,&,').

#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

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF