MODUL PROLOG
Pengenalan Prolog
Prolog merupakan suatu bahasa pemrograman yang banyak digunakan dalam pengembangan Artificial Intelliegence. programming. Bahasa prolog ini memiliki ciri-ciri :
Bahasa pemrograman yang non sequential Bahasa pemrograman yang deklaratif Simbolik Berdasarkan first order logic
Sintaksnya sangat sedikit sekali, Secara teoritis tidak ada tipe data, tetapi bilangan bulat terpisah. Semantik sangat jelas dan terdefinisi secara matematis. Karena prolog yang digunakan adalah swi-prolog maka untuk menjalankan
program tersebut adalah dengan mengklik 2 kali pada shortcut swi-prolog. Suatu program prolog tidak memiliki struktur seperti deklarasi, dan lainlainnya. Seluruh atom ditangani secara sama, yang ada hanyalah clause. Untuk memulai penjelasan tersebut akan dijelaskan tentang bagian-bagian dalam program Prolog.
1. Term
Suatu data yang bukan merupakan variabel disebut dengan term. Atomic term
Ada dua jenis, atom dan integer Dimulai dengan huruf kecil atau angka numerik. Contoh made, psg, 123.
1 Dari 10
2. Functions
Simbol suatu fungsi disebut functor.
Arity dari suatu fungsi adalah jumglah dari argumennya. Suatu atom adalah fungsi dengan arity sama dengan 0. Argumen dapat berupa term atau variabel,
3. Clause
Program prolog dapat dianggap sebagai suatu himpunan fungsi boolean, yang disebut dengan clause. Clause dapat memiliki argumen atau tidak memiliki. Clause dapat memiliki body yang kosong, disebut dengan fact, sedang yang memiliki body disebut rule. Suatu query dapat dinyatakan sebagai suatu predicate, arity dari predicate adalah jumlah argumen yang dipakainya.
Contoh program : 1. Ketikkan dan beri nama prog1_1.pro saya_lapar. Panggil prolog dan jalankan ?- consult(prog1). yes. ?- saya_lapar. yes. ?- kamu_lapar. no
2 Dari 10
2. Ketikkan program berikut ini dan beri nama prog1_2.pro bisa_makan_siang :punya_makanan. punya_makanan. Jalankan dan "consult" ?- bisa_makan_siang. Yes Bagian pertama adalah rule dan bagian ke dua adalah fact.
[Head|Tail]
Contoh : [ saya, kamu, dia, engkau] sama dengan [saya | kamu, dia, engkau]
3 Dari 10
Contoh program : 1. Ketikkan klause simpel ini : dosen(bejo, harvard_graphic). Lalu consult dan beri pertanyaan : ?- dosen(bejo,Mata_Kuliah). ?- dosen(Siapa, harvard_graphic). ?- dosen(Siapa, Apa). 2. Ketikan program di bawah ini : angka([1,2,3,4]). kalimat(kucing,[duduk, di | [atas, meja]]). ?- angka([1,Y|Z]). ?- kalimat(kucing,[Kata_kerja|Sisa]). 3. Ketikkan beberapa operasi list berikut ini : length([],0). length([Head|Tail],Length):length(Tail,Tail_Length), Length is Tail_Length + 1. member(Element,[Element|_]). member(Element,[_|Tail]):member(Element,Tail). append([], List, List). append([Head|Tail], List, [Head|Tail_List]):append(Tail, List, Tail_List). delete(Element, [Element|Tail], Tail). delete(Element, [Element_lain|Tail], [Element_lain], Tail_terhapus):delete (Element, Tail, Tail_terhapus). Pengantar Kecerdasasn Buatan
4 Dari 10
asserta(X)
akan memasukkan klausa X ke program sebelum didapatkan klausa dengan awal predikat yang sama
assertz(X) retract(X)
5 Dari 10
Contoh Program : 1. Contoh : pinjam(Buku, Tanggal) :retract(rak(Buku)) assertz(peminjaman(Buku, Tanggal). kembali(Buku, Tanggal, Denda) :retract(peminjaman(Buku, Tanggal_Pinjam)), asserta(rak(Buku), hitung_denda(Tanggal_Pinjam, Tanggal, Denda). hitung_denda(Tanggal_Pinjam, Tanggal_kembali, Denda) :Denda is 100. 2. Contoh untuk menghasilkan bilangan fibonaci fibonaci(1,1). fibonaci(2,1). fibonaci(Angka, Angka_fibo) :Angka > 2, N1 is Angka - 1, fibonaci(N1, F1), N2 is Angka - 2, fibonaci(N2, F2), Angka_fibo is F1 + F2. /* tambahkan baris ini untuk mempercepat */ asserta((fibonaci(Angka, Angka_fibo):- !)).
6 Dari 10
findall(Variable, _solution_for_the_variable).
Querry,
List_of
semua solusi diletakkan dalam list berurutan dengan urutan ditemukannya. Contoh Program : pengajar(dewi, harvard). pengajar(dewi, informix). pengajar(adang, as400). pengajar(adang, access). pengajar(silfi, ncr). pengajar(silfi, as400). pengajar(dewi, harvard). pengajar(tutun,lan). pengajar(adrian,lan). Lakukan query : ?- bagof(Mata_kuliah, pengajar(Nama, Mata_kuliah), List_Mata). ?- setof(Mata_kuliah, pengajar(Nama, Mata_kuliah), List_Mata). ?- findall(Mata_kuliah, pengajar(Nama, Mata_kuliah), List_Mata). Catatan : tidak pada semua prolog terdapat findall. untuk itu dapat dibuat : findall(Variable, Goal, _):Goal, assertz(found(Variable)), Pengantar Kecerdasasn Buatan
7 Dari 10
FILE
Untuk operasi file dapat digunakan :
Contoh program : Program menyalin file copy(From, To):see(From), tell(T), repeat, read(X), write(X), X== end_of_file, seen, told
8 Dari 10
xfx non associative infix xfy right associative infix yfx left associative infix fx non-associative prefix fy righ associative prefix xf non-associative postfix yf left associaive postfix
Term = .. List
Akan memberikan hasil berupa suatu list berisi functor dan arity. Contoh program : ?-op200,xfx,was). ?-op(180,xfx,of). ?-op(160,fx,the). asserta(helen was the secretary of the department) Pengantar Kecerdasasn Buatan
9 Dari 10
. ini sama dengan bila kita memasukkan fact dengan mengetik : was(helen,of(the(secretary),the(department))) 2. copy(Old_term, New_term):functor(Old_term, Functor, Arity), functor(New_term, Functor, Arity)
10 Dari 10