Awal Mula Bahasa Pemrograman Prolog

Alain Calmerauer dan Philippe Roussel, dari University of Aix Marseille, dengan batuan Robert Kowalski dari University of Edinburgh adalah tiga orang yang telah menghasilkan rancangan dasar dari bahasa Prolog. Alain Calmerauer dan Philippe Roussel menekuni bidang pemrosesan bahasa alami (Natural Language Processing), sedangkan Robert Kowalski menekuni Automated Theorem Proving. Kolaborasi antara University of Aix Marseille dan University of Edinburgh berlangsung hingga pertengahan 1970. Sejak saat itu, riset terkait pengembangan dan penggunaan bahasa Prolog maju pesat secara sendiri-sendiri pada kedua lokasi. Diantara hasilnya, diperoleh dua dialects Prolog yang berbeda secara syntactic.

Upaya pengembangan Prolog dan riset tentang logic programming mendapatkan perhatian yang terbatas di luar dari Edinburgh dan Marseille hingga tahun 1981 dimana pemerintah Jepang meluncurkan projek riset besar yang dinamakan Fifth Generation Computing Systems (FGCS; Fuchi, 1981; Moto-oka, 1981). Salah satu dari tujuan utamanya adalah mengembangkan intelligent machines, dan Prolog dipilih sebagai basis dalam upaya tersebut.

Peluncuran FGCS turut membangkitan berbagai riset di United States dan beberapa negara Eropa, serta ketertarikan yang kuat pada area artificial intelligence dan logic programming.

Terms

Saat ini telah terdapat banyak dialects dari Prolog. Dialects tersebut dapat dikelompokkan ke dalam beberapa kategori: (i) yang berkembang dari Marseille group; (ii) yang berkembang dari Edinburgh group, dan (iii) beberapa dialects yang dikembangkan untuk microcomputers, seperti micro-Prolog, yang dideskripsikan oleh Clark and McCabe (1984). Dialect ini agak berbeda secara syntactic.

Daripada mendeskripsikan syntax dari sejumlah dialects dari Prolog, satu dialect tertentu yang tersedia secara luas, yaitu yang berkembang di Edinburgh dipilih untuk dibahas. Bentuk bahasa dari dialect ini sering disebut Edinburgh syntax.

Berikut ini adalah beberapa terminologi yang mengacu pada Edinburgh syntax dari Prolog:
  • Sebagaimana bahasa pemrograman pada umumnya, dalam bahasa Prolog, program juga terdiri dari sejumlah statements. Hanya ada beberapa jenis statement, tapi dapat berupa statement yang kompleks.
  • Setiap statement Prolog, termasuk Prolog data, dikonstruksi dari yang disebut terms
  • Term dimaksudkan sebagai suatu constant, variable, atau structure
  • Constant dapat berupa atom atau suatu integer
  • Atom adalah symbolic value pada Prolog , seperti pada bahasa fungsional LISP.
  • Secara khusus, atom dapat berbentuk:
    • a. huruf, digits, dan underscores diawali oleh huruf lowercase
    • b. karakter-karakter ASCII diapit oleh dua tanda petik (‘)
  • Variable adalah huruf-huruf , digits, dan underscores diawali oleh huruf uppercase
  • Instantiation dimaksudkan sebagai binding antara variable dan suatu nilai. Instantiation berlangsung selama diperlukan pencapaian suatu goal, dalam arti pembuktian (benar atau tidaknya) suatu proposition.
  • Structure adalah representasi dari atomic proposition pada predicate calculus, bentuk umumnya adalah
functor(parameter list)
dimana functor dapat berupa atom dan digunakan untuk identifikasi suatu structure, sedangkan parameter list dapat berupa list dari atoms, variables, atau structures.

Fact Statements

Prolog statements diawali oleh sejumlah statements yang berperan membentuk hypotheses atau database dari assumed information, yaitu koleksi statements darimana suatu new information dapat dihasilkan (inferred)

Prolog mempunyai dua bentuk statement dasar: (i) yang mengacu pada bentuk headless clauses; dan (ii) yang mengacu pada bentuk headed Horn clauses dari predicate calculus. Bentuk paling sederhana dari headless Horn clause adalah suatu single structure, yang diartikan sebagai unconditional assertion, atau fact. Secara logical, facts adalah propositions yang diassumsikan sebagai bernilai true. Contoh berikut memberikan illustrasi tentang jenis facts di dalam program Prolog. (catatan: setiap Prolog statement diakhiri oleh titik/period).
female(shelley).
male(bill).
female(mary).
male(jake).
father(bill, jake).
father(bill, shelley).
mother(mary, jake).
mother(mary, shelley).
Simple structures di atas menyatakan facts tertentu tentang jake, shelley, bill, dan mary. Misalnya, statement pertama menyatakan bahwa shelley adalah female. Pada empat statements terakhir, terdapat dua parameter yang dihubungkan oleh suatu relationship yang diberi nama sebagaimana pada functor atom; misalnya, proposition ke lima dapat diartikan bahwa ”bill is the father of jake”.

Perlu dipahami bahwa Prolog propositions, seperti pada predicate calculus, tidak mempunyai semantic otomatis (intrinsic semantics). Proposition tersebut dapat diartikan apa saja sesuai keinginan pemrogram. Misalnya, proposition "father(bill, jake)” dapat diartikan sebagai "bill and jake have the same father” atau "jake is the father of bill”. Tentunya, makna yang umum dan sederhana adalah "bill is the father of jake".

Rule Statements

Bentuk statment dasar yang lainnya dalam mengkonstruksi database dari assumed information adalah yang bersesuaian dengan headed Horn clause. Bentuk tersebut sesuai dengan teori popular di dalam mathematics, bahwa suatu kesimpulan (conclusion) dapat dihasikan jika sejumlah kondisi (conditions) terpenuhi (satisfied).

Dari suatu rule statement, bagian kanan (right side) dinamakan antecedent, atau if part, dan bagian kiri (left side) dinamakan consequent, atau then part . Jika antecedent dari suatu rule statement bernilai true , maka consequent dari rule statement tersebut juga bernilai true. Karena menggunakan konsep Horn clauses, consequent dari rule statement adalah single term, sedangkan antecedent dapat berbentuk single term atau suatu conjunction.

Conjunctions terdiri dari multiple terms yang dipisahkan oleh logical AND operations. Di dalam Prolog, AND operation tersebut diasumsikan secara otomatis . Berdasarkan bentuk dari structures, atomic propositions di dalam suatu conjunction dipisahkan oleh koma (commas), sehingga (commas) dimaknai sebagai AND operators. Sebagai contoh dari suatu conjunction:
female(shelley), child(shelley).
Dalam Prolog, bentuk umum dari headed Horn clause statement adalah:
consequence :- antecedent_expression.
Statement di atas dibaca sebagai berikut: “consequence dapat disimpulkan jika antecedent expression bernilai true, atau dapat dibuat bernilai true melalui instantiation dari variable-variable nya.”

Sebagai contoh,
ancestor(mary, shelley) :- mother(mary, shelley).
Statement di atas menyatakan bahwa jika mary adalah mother of shelley, maka mary adalah ancestor of shelley.

Dapat juga menggunakan variables (universal objects) untuk generalisasi makna, seperti:
parent(X,Y): mother(X,Y).
parent(X,Y): father(X,Y).
grandparent(X , parent(X,Y), parent(Y,Z).
Headed Horn clauses dinamakan rules, karena berperan sebagai “rules of implication” antara beberapa propositions.

Goal Statements

Seperti telah dibahas sebelumnya, Prolog statements for logical propositions, digunakan untuk mendeskripsikan known facts dan rules (yang mendeskripsikan logical relationships antar facts). Satatement-statement tersebut merupakan basis bagi theorem-proving model. Theorem dinyatakan dalam bentuk proposition yang memerlukan pembuktian (prove or disprove). Di dalam Prolog, propositions dimaksud disebut goals, atau queries . Bentuk sintaks dari Prolog goal statements sama dengan bentuk sintaks dari headless Horn clauses

Sebagai contoh, goal statement:
man(fred).
Goal statement di atas akan direspon oleh sistem sebagai yes or no. Jawaban yes berarti bahwa sistem telah membuktikan bahwa goal adalah benar (true) berdasarkan database facts dan relationships yang diberikan, dan jawaban no berarti bahwa statement goal terbukti salah (false) atau sistem tidak dapat membuktikan kebenaran dari goal statement tersebut.

Conjunctive propositions dan propositions dengan variables juga dapat digunakan sebagai goal statement yang legal . Dengan kehadiran variables, sistem tidak hanya menyatakan validitas dari goal tetapi juga mengidentifikasi nilai (instantiations) dari variables yang membuat goal bernilai true. Sebagai contoh, goal statement (query) berikut dapat dilakukan:
father(X, mike).
Sistem akan mencoba, melalui unification, menemukan suatu nilai (instantiation) dari X (dari database facts dan rules) yang akan menghasilkan nilai true pada goal.

No comments:

Post a Comment