Iklan

Kamis, 24 Mei 2012

UNIFIKASI DAN PENGENDALIAN PROGRAM TURBO PROLOG


I. Unifikasi
            Unifikasi adalah suatu proses pemadanan atau pembandingan untuk mencari jawaban seperti nilai suatu variabel. Melalui unifikasi suatu variabel diberi nilai.
            Beberapa hal tentang unifikasi :
a. Unifikasi terjadi pada sesama argumen yang posisinya sama.
b. Nama dan aritas predikat harus sama
c. Unifikasi terjadi bersamaan pada semua argumen.
d. Hasil unifikasi tidak boleh mengakibatkan variabel mempunyai nilai ganda atau bertentangan.
e. Domain objek majemuk dapat berunifikasi dengan variabel biasa seperti s(A) dengan C.
f. Argumen objek majemuk dapat berunifikasi dengan variabel biasa seperti s(x) dengan s( C ).
g. Bisa terjadi unifikasi dengan aturan.

contoh :
domains
      jenis,pabrik =symbol
      penumpang=integer
predicates
      pembuat(pabrik,jenis)
      pesawat(jenis,penumpang)
      pesawat_kecil(jenis)
clauses
      pembuat(boeing,boeing_747).
      pembuat(fokker,f28).
      pembuat(iptn,n250).
      pesawat(boeing_747,500).
      pesawat(n250,50).
      pesawat_kecil(Jenis):-
            pembuat(_,Jenis),
            pesawat(Jenis,JmlPen),
            JmlPen>100.      

Apabila kiat meniliskan pada goal:
            pesawat_kecil(Jenis)
maka Turbo Prolog akan menjawab :
            Jenis = n250
            1 solutions

            Pada saat Turbo prolog menerima goal tadi, maka Turbo Prolog melakukan pemanggilan klausa pesawat_kecil yang berupa aturan. Pencarian jawaban akan berhasil bila tubuh klausa terpenuhi yaitu :
  • Pertama, Turbo Prolog akan memanggil sub klausa penbuat(_,Jenis). Di sini nama pabrik tidak dipermasalahkan karena menggunakan variabel tak bernama. Oleh karena itu hanya variabel Jenis yang diinstantiasikan dengan boeing_747. Turbo Prolog kembali dari memanggil klausa pembuat dengan hasil Jenis = boeing_747.
  • Kedua, Turbo Prolog memanggil sub klausa pesawat(boeing_747,JmlPen), yang kemudian kembali dengan JmlPen = 500.
  • Ketiga, Turbo Prolog melakukan pembandingan 500<100. Hasilnya gagal.
  • Keempat, kegagalan ini menyebabkan Turbo Prolog mencari jawaban yang lain sehingga diperoleh Jenis = n250 dan JmlPen =50. Maka Turbo Prolog akan menjawab seperti di atas.

Untuk selanjutnya pahami contoh program berikut ini :
domains
   name = symbol
   gpa  = real

predicates
   honor_student(name)
   student(name, gpa)
   probation(name)

clauses
   honor_student(Name):-
      student(Name, GPA),
      GPA>=3.5,
      not(probation(Name)).

   student("Betty Blue", 3.5).
   student("David Smith", 2.0).
   student("John Johnson", 3.7).
   probation("Betty Blue").
   probation("David Smith").

Ketikkan pada bagian goal : honor_student(Name)


II. Lacak Balik.

            Dalam menyelesaikan permasalahan, Turbo Prolog akan mencari semua kemungkinan jawaban. Apabila menemui kegagalan, Turbo Prolog akan melacak balik.(analog dengan pencarian suatu alamat).
            Dalam pelacakannya, Turbo Prolog menggunakan metode pencarian terdalam (depth-first search).
            Perhatikan contoh berikut ini :

domains
      orang,makanan,rasa = symbol
predicates
      suka(orang,makanan)
      berasa(makanan,rasa)
      makanan(makanan)
clauses
      suka(didit,X):-
      makanan(X),berasa(X,keju).
      berasa(roti,tawar).
      berasa(pia,coklat).
      berasa(pia,susu).
      berasa(pia,keju).
      makanan(roti).
      makanan(kripik).
      makanan(pia).
goal
      suka(didit,Apa),
            write(" Didit suka makan ",Apa).

Pada saat program dijalankan, Turbo Prolog akan mencari klausa suka dari atas. Dalam hal ini, program akan memanggil klausa suka dan didapati aturan :
            suka(didit,X) :- makanan(X),berasa(X,keju).

Pada saat itu terjadi unifikasi antara variabel Apa dengan X yang keduanya masih bebas. Aturan di atas terdiri dari dua sub-goal :makanan dan berasa, keduanya harus terpenuhi. Maka Prolog mulai memanggil sub-goal paling atas hingga paling bawah. Pertama, prolog melakukan unifikasi sub goal makanan(X) dengan kumpulan klausa makanan yang teratas yakni :makanan(roti). Unifikasi berhasil menyebabkan X terikat dengan roti. Di sini Prolog mencatat titik lacak balik untuk klausa makanan, karena ada klausa makanan lain, yaitu makanan(kripik). Prolog kembali dengan berhasil(X=roti), sehingga Prolog melanjutkan ke subgoal berikutnya :berasa(X,keju), yang diartikan berasa(roti,keju).
Di sini Prolog mengalami kegagalan karena tidak menemukan fakta berasa(roti,keju). Kemudian Prolog memeriksa catatan titik balik dan ada pada makanan(kripik), sehingga terjadi unifikasi antara variabel X dengan kripik. Pada saat ini Prolog juga mencatat titik lacak balik di makanan(pia).
Kemudian Prolog mencari fakta berasa(kripik,keju) yang juga mengalami kegagalan. Sehingga Prolog memulai pelacakan kembali dari titik balik terakhir yaitu pada makanan(pia). Yang kemudian Prolog melanjutkan ke subgoal berasa(pia,keju) dan berhasil karena ada fakta tersebut.

Tidak ada komentar:

Posting Komentar