Prolog
menggunakan teknik pencarian yang disebut heuristik (heuristic) dengan
menggunakan pohon logika. prolog banyak dikembangkan di University of Melbourne
oleh Lee Naish dan John Loyd. Prolog dalam perkembangannya telah dikombinasikan
dengan berbagai bahasa pemrograman terutama functional programming. Bahasa
prolog ini secara intensif digunakan pada proyek komputer generasi ke-5 di
Jepang. Walaupun demikian sebetulnya penggunaannya tidak terbatas untuk AI
saja.
Prolog
adalah bahasa pemrograman logika atau di sebut juga sebagai bahasa
non-procedural. Namanya diambil dari bahasa Perancis programmation en logique
(Pemrograman logika). Bahasa ini diciptakan oleh Alain Colmerauer dan Robert
Kowalski sekitar tahun 1972 dalam upaya untuk menciptakan suatu bahasa
pemrograman yang memungkinkan pernyataan logika alih-alih rangkaian perintah
untuk dijalankan komputer. Berbeda dengan bahasa pemrograman yang lain, yang
menggunakan algoritma konvensionl sebagai teknik pencariannya seperti pada
Delphi, Pascal, BASIC, COBOL dan bahasa pemrograman yang sejenisnya, maka
prolog menggunakan teknik pencarian yang di sebut heuristik (heutistic) dengan
menggunakan pohon logika.
Sejarah Prolog :
1.Prolog singkatan dari Programming in
Logic.
2.Dikembangkan oleh Alain Colmenraurer dan
P.Roussel di Universitas Marseilles Perancis,   tahun1972.
3.Prolog populer di Eropa untuk
aplikasi artificial intelligence, sedangkan di Amerika peneliti    mengembangkan aplikasi yang sama, yaitu LISP.
Ciri-ciri bahasa prolog :
1.    Bahasa pemrograman yang non
sequential.
2.    Bahasa pemrograman yang deklaratif.
3.    Simbolik.
4.    Berdasarkan first order logic.
Perbedaan bahasa
prolog dengan bahas lainnya
Bahasa Pemrograman yang Umum (Basic, Pascal, C, Fortran) :
1.Diperlukan algoritma / prosedur untuk
memecahkan masalah (procedural languange)
2. Program menjalankan prosedur yang
sama berulang-ulang dengan data masukan yang  berbeda-beda.
3. Prosedur dan pengendalian program
ditentukan oleh programmer dan perhitungan dilakukan sesuai dengan prosedur yang telah dibuat.
Bahasa Pemrograman
Prolog :
1. Object oriented languange atau
declarative languange.
2. Tidak terdapat prosedur, tetapi hanya
kumpulan data-data objek (fakta) yang akan diolah, dan relasi antar objek tersebut membentuk aturan yang
diperlukan untuk mencari suatu jawaban
3. Programmer menentukan tujuan (goal),
dan komputer menentukan bagaimana cara mencapai tujuan
tersebut serta mencari jawabannya.
4.  Dilakukan pembuktian terhadap
cocok-tidaknya tujuan dengan data-data yang telah ada dan relasinya.
5. Prolog ideal untuk memecahkan masalah
yang tidak terstruktur, dan prosedur pemecahannya tidak
diketahui, khususnya untuk memecahkan masalah non numerik.
6. Prolog bekerja seperti pikiran
manusia, proses pemecahan masalah bergerak di dalam ruang masalah menuju suatu tujuan (jawaban tertentu).
Contoh : Pembuatan program catur dengan Prolog
Beberapa Aplikasi
Prolog :
1. Sistem Pakar (Expert System) : Program menggunakan teknik pengambilan kesimpulan dari
data-data yang didapat, layaknya seorang
ahli.
Contoh: dalam mendiagnosa penyakit
2. Pengolahan Bahasa Alami (Natural
Languange Processing) : Program dibuat agar
pemakai dapat  berkomunikasi dengan komputer dalam bahasa manusia sehari-hari, layaknya penterjemah.
3. Robotik : Prolog
digunakan untuk mengolah data masukanyang berasal dari sensor dan mengambil
keputusan untuk menentukan gerakan yang harus
dilakukan.
4. Pengenalan Pola (Pattern Recognition) : Banyak digunakan dalam image processing, dimana
komputer dapat membedakan suatu objek dengan
objek yang lain.
5. Belajar (Learning) : Program belajar dari kesalahan yang pernah dilakukan,
dari pengamatan atau dari hal-hal yang
pernah diminta untuk dilakukan.
Program Visual Prolog :
Secara umum, program Visual Prolog
terdiri dari empat section dasar, yaitu :
Section Clauses
Section clauses merupakan section
yang paling penting pada program Visual Prolog. Pada section inilah kita
meletakkan fakta dan aturan. Ketika mencari jawaban, Visual Prolog akan mencari
dari bagian paling atas dari section clauses, melihat setiap fakta dan aturan
untuk mendapat jawaban benar, hingga ke bagian paling bawah dari section ini.
Section Predicates
Sebelum mendefinsikan predikat di
section clauses, maka predikat tersebut harus dideklarasikan terlebih dahulu di
section predicates. Kalau tidak, Visual Prolog tidak akan mengenal predikat
yang kita tuliskan tersebut. Ketika mendeklarasikan suatu predikat, kita memberitahu Visual Prolog domain dari argumen yang dimiliki predikat tersebut.
Visual Prolog mempunyai perpustakaan predikat yang kalau dipakai tidak perlu
dideklarasikan, karena sudah built-in. Untuk melihat predikat apa saja serta
manfaatnya yang ada di perpustakaan Visual Prolog dapat melihat help dari
Visual Prolog (Help | Contents).
Deklarasi Predikat
Deklarasi predikat dimulai dengan
nama predikat diikuti tanda kurung buka, kemudian diikuti nol atau lebih
argumen dari predikat (setiap argumen dipisah dengan tanda koma) kemudian ditutup dengan tanda kurung tutup, seperti:
PredicatName(tipe_argumen1,tipe_argumen2,...,tipe_argumenN)
dan tidak seperti section clauses, deklarasi predikati tidak perlu diakhiri tanda titik
Nama Predikat
Nama predikat harus dimulai dengan huruf diikuti dengan serangkaian huruf, angka dan atau garis bawah (underscore). Walaupun bisa dimulai huruf besar, namun sangat direkomendasikan untuk memakai huruf kecil diawal nama predikat (beberapa versi Prolog yang lain tidak memperbolehkan nama predikat diawali huruf besar). Panjang nama predikat bisa sampai 250 karakter.
Contoh penamaan predikat : Nama predikat yang legal Nama predikat yang illegal
dan tidak seperti section clauses, deklarasi predikati tidak perlu diakhiri tanda titik
Nama Predikat
Nama predikat harus dimulai dengan huruf diikuti dengan serangkaian huruf, angka dan atau garis bawah (underscore). Walaupun bisa dimulai huruf besar, namun sangat direkomendasikan untuk memakai huruf kecil diawal nama predikat (beberapa versi Prolog yang lain tidak memperbolehkan nama predikat diawali huruf besar). Panjang nama predikat bisa sampai 250 karakter.
Contoh penamaan predikat : Nama predikat yang legal Nama predikat yang illegal
Fakta [fakta]
pemain_piano *pemain_piano*
milik_umum_atau_pribadi milik_umum/pribadi
polaTindakKriminal Pola-Tindak-Kriminal
pilih_Item_Menu pilih Item Menu
nama_predikat nama
pemain_piano *pemain_piano*
milik_umum_atau_pribadi milik_umum/pribadi
polaTindakKriminal Pola-Tindak-Kriminal
pilih_Item_Menu pilih Item Menu
nama_predikat nama
rangking_10_besar #rangking_10_besar
Argumen predikat
Argumen predikat harus yang sudah
dikenal oleh domain Visual Prolog. Suatu domain bisa merupakan domain standar
atau bisa juga domain yang sudah dideklarasikan pada section domains.
Contohnya, jika dideklarasikan suatu predikat predikat_ku (symbol, integer) pada section predicates seperti ini:
PREDICATES
predikat_ku(symbol,integer)
maka tidak perlu lagi mendeklarasikan domain dari argumen pada section domains, karena symbol dan integer adalah standar domain.
Section Domains
Section domains mempunyai 2 manfaat utama, yaitu pertama, kita dapat memberikan nama yang berarti untuk domain, walaupun secara internal domain tersebut sama tipenya dengan domain yang telah ada; yang kedua, kita dapat mendeklarasi domain khusus yang digunakan untuk mendeklarasikan struktur data yang tidak didefinisikan oleh standar domain. Dengan mendeklarasikan domain juga dapat mencegah kesalahan logika pada program. Contoh:
DOMAINS
predikat_ku(symbol,integer)
maka tidak perlu lagi mendeklarasikan domain dari argumen pada section domains, karena symbol dan integer adalah standar domain.
Section Domains
Section domains mempunyai 2 manfaat utama, yaitu pertama, kita dapat memberikan nama yang berarti untuk domain, walaupun secara internal domain tersebut sama tipenya dengan domain yang telah ada; yang kedua, kita dapat mendeklarasi domain khusus yang digunakan untuk mendeklarasikan struktur data yang tidak didefinisikan oleh standar domain. Dengan mendeklarasikan domain juga dapat mencegah kesalahan logika pada program. Contoh:
DOMAINS
nama, jender = symbol
umur = integerPREDICATES
orang(nama, jender, umur)
Standar Domain Visual Prolog
Visual Prolog mempunyai standar
domain built-in. Kita dapat menggunakan standar domain ketika mendeklarasikan
tipe dari argumen suatu predikat. Standar domain sudah dikenal Visual Prolog
dan tidak perlu didefinisikan lagi pada section domains.
Dasar
Pemrograman Prolog
Dasar pemrograman Prolog dalam bahasa pemrograman prolog dikenal beberapa istilah atau pengertian dasar, yaitu : 
1.    Fakta
Fakta adalah suatu kenyataan
atau kebenaran yang diketahui, dan menyatakan relasi antara dua  objek  atau  lebih. Fakta juga dapat berisi sifat suatu objek.
1. Prolog terdiri dari kumpulan data-data objek
yang merupakan suatu fakta.
2. Fakta dibedakan 2 macam :
a.Menunjukkan relasi.
b. Menunjukkan milik/sifat
3. Penulisannya diakhiri dengan tanda titik “.”
Contoh :
Slamet adalah ayah Amin Ayah (Slamet, Amin).
Anita adalah seorang wanita Wanita (Anita).
Angga suka renang dan tenis Suka (angga,
renang).dan suka (angga,tenis).
Jeruk berwarna jingga Jingga (jeruk).
2.    Aturan
Atruan merupakan logika yang
dirumuskan dalam bentuk relasi sebab akibat dan hubungan implikasi.
1.Aturan adalah suatu pernyataan yang menunjukkan
bagaimana fakta-fakta berinteraksi satu dengan
yang lain untuk membentuk suatu kesimpulan.
2. Sebuah aturan dinyakatakan sebagai
suatu kalimat bersyarat.
3. Kata “if” adalah kata yang dikenal
Prolog untuk menyatakan kalimat bersyarat atau disimbolkan
dengan “:-“.
4. Setiap aturan terdiri dari
kesimpulan(kepala) dan tubuh.
5. Tubuh dapat terdiri dari 1 atau lebih
pernyataan atau aturan yang lain, disebut subgoal dan dihubungkan dengan logika “and”.
6. Aturan memiliki sifat then/if
conditional
“Kepala(head) benar jika tubuh (body) benar”.
Contoh :
F   :  Tino suka apel suka(tino, apel).
A : Yuli suka sesuatu yang disukai Tino
suka (yuli, Sesuatu) :- suka (tino, Sesuatu).
3.    Klausa
Klausa adalah
suatu ungkapan atau susunan kata yang didalam Prolog dapat berupa fakta atau aturan. Dalam suatu klausa dapat terdiri dari beberapa
sub-klausa, yang dihubungkan satu dengan yang lain dengan tanda (,) atau (;).
1.      Tanda tanda (,) menunujukan sifat hubungan (konjungsi),
2.      sedangkan tanda (;) menunjukan hubungan or (disjungsi).
Contoh :
Orangtua(P,Q)
:- bapak(P,Q); ibu(P,Q). kakek(A,Z) :- bapak(A,X),
orangtua(X,Z)
4.    Relasi
Relasi  adalah  table  dengan  jumlah  n  kolom  dan  terdiri  dari  beberapa baris  fakta  maupun aturan.  Append  adalah  sekumpulan  tuple (X,Y,Z) dimana  Z  terdiri  dari  elemen  X  diikuti  dengan  Y  atau   Z  =  X  +  Y. Anggota relasi  append  terdiri  dari  :  ([], [], [])  ([a], [], [a])  ([a],[b],[a,b])([a,b[c,d[a,b,c,d]) sedangkan  ([a],[b],[])  bukan  anggota  relasi  append. Secara  umum   suatu  relasidinyatakan  dalam  bentuk  aturan  atau  fakta  sebagai  berikut  :  P   if   Q1   and   Q2   and
... and   QK   untuk K  > =  0
5.  Variabel
1.  Varibel  adalah  besaran  yang  nilainya  dapat  berubah-ubah.
2. Tata  cara  penulisan  variabel :
a. Nama  varibel  harus  diawali  huruf  besar  atau  garis  bawah  (_)
b. Nama  variabel  dapat  terdiri  dari  huruf ,  bilangan,  atau  simbol  dan  merupakan     kesatuan  dengan  panjang  maksimum  250  karakter.
3. Nama  variabel  hendaknya  mengandung  makna  yang  berkaitan  dengan  data  yang dinyatakannya.
Argumen  suatu  predikat  dapat  berupa  konstanta,  variable,  atau  objek  lain.  Setiap  argument dalam  prolog  biasa  disebut  term.  Dalam  Prolog  terdapat  dua  variabel  yaitu  : 
1.  Variabel  bernama,  yaitu  variabel  yang  diberi  nama  seperti  X,  Orang,  dan  sebagainya.
2.  Variabel  tak  bernama  ( placeholder),  di lambangkan   dengan   tanda   garis  bawah  (_). 
Setiap  term  yang  ditulis  dengan  awalan  huruf  kapital selalu dianggap sebagai variable bernama dalam Prolog, sedangkan awalan dengan huruf kecil
dianggap sebagai suatu relasi atau konstanta. Variabel tak bernama digunakan untuk mengabaikan nilai
suatu variabel, yang berarti bisa bernilai
apa saja. Berikut adalah contoh penggunaan variable bernama dan tidak bernama. Member (X,[X|_]). Member(X,[_|Y]) :- Member(X,Y).
Contoh  :  dari  silsilah  di atas  :
?- ayah(slamet,Anak).
Anak = budi ;
Anak = badu
No
Dari query  diatas  akan  dicari  siapakah anak  dari  ayah  yang bernama Slamet. Karena mempunyai  relasi  yang  sama (yaitu  ayah),  variabel  Anak  akan  mencari  nilai  dari  konstanta  suatu  fakta  /  aturan  yang  sepadan. 
Tanda  “;”  digunakan  bila  terdapat  kemungkinan  ada  lebih  dari  satu  jawaban.
“No”  berart i  tidak  ada  lagi  kemungkinan  jawaban.
Pertanyaan
Setelah memberikan data-data berupa fakta dan
aturan, selanjutnya  kita  dapat  mengajukan  pertanyaan  berdasarkan  fakta  dan  aturan  yang  ada.
A.  Penulisan nya  diawali  simbol  “?-“  dan  diakhiri  tanda  “.” .
contoh :
Apakah  Tini  suka  boneka  ? ?-  suka  (tini,  boneka).
Yes ……. (jika  faktanya  Tini  suka  boneka)
No……..…(jika  tidak  sesuai  fakta).
Apakah  yang  disukai  Tini  ? ?-  suka  (tini,  Apa).
Apa  =  boneka
Siapakah  yang  suka  boneka  ? ?-  suka  (Siapa,  boneka).
Siapa  =  tini
Dari  contoh  silsilah  keluarga  di atas :
Siapakah  kakek  Budi  ??-  kakek  (Siapa,  budi).
Siapa  =  slamet
Siapakah  cucu  Slamet  ??-  kakek  (slamet,  Cucu).
Cucu  =  budi ;
Cucu  =  badu
(jika  kemungkinan  ada  lebih  dar i  satu  jawaban  g unakan  tanda  “;”  pada  akhir  setiap  jawaban).
Predikat
1.     
Predikat  adalah  nama  simbol ik  untuk  relasi.
2.     
Contoh  :  ayah  (slamet,  amin).
Predikat dari fakta
tersebut ditulis : ayah (simbol, simbol). Dimana ayah adalah nama predikat, sedangkan  slamet  dan  amin menujukkan argumen.  Sebuah  predikat  dapat  tidak  memiliki  atau  memiliki  argumen  dengan  jumlah  bebas.  Jumlah  argumen  suatu  predikat disebut  aritas  (arity).
ayah (nama) …… aritas-nya 1
ayah(nama1,nama2) ….. aritasnya 2
3.     
Syarat  -  syarat  penulisan  nama  predikat
:
A. Harus  diawali  dengan  huruf  kecil  dan  dapat  diikuti  dengan  huruf,  bilangan  a tau  garis  bawah.
B.  Panjang  nama  predikat  maksimum  250  karakter.
C. Tidak  diperbolehkan  menggunakan  spasi,  tanda  minus,  tanda  bintang  dan  garis  miring.
Sumber:





