Feeds:
Posts
Comments

Prolog menyediakan fasilitas untuk menampilkan output dan menginput suatu pernyataan (term) atau karakter baik melalui keyboard maupun dari media lain seperti hard disk atau CD-ROM. Penjelasan mengenai hal tersebut akan kami bahas dalam postingan kali ini.

v   Menampilkan output pernyataan

Untuk menampilkan output berupa pernyataan dapat digunakan predikat bawaan dari prolog, yaitu write, writeq, dan nl. Predikat write/1 (satu argumen) digunakan untuk menampilkan output tanpa tanda petik. Predikat writeq sama dengan predikat write, hanya saja writeq menampilkan pernyataan dengan disertai tanda petik (quote), kecuali jika pernyataan yang ditulis hanya satu kata saja, maka tanda petik tidak tertampilkan. Sedangkan predikat nl/0 (tanpa argumen) berfungsi sama dengan tombol enter, yaitu untuk membuat baris baru (new line).

Contoh penggunaan dari predikat-predikat tersebut adalah sebagai berikut.

1 ?- write(‘matdis itu asik’).

matdis itu asik

Yes

2 ?- writeq(‘hati-hati’).

‘hati-hati’

Yes

3 ?- writeq(‘hati’).

hati

Yes

4 ?- writeq(‘hati-hati dengan hati’).

‘hati-hati dengan hati’

Yes

5 ?- write(‘maju terus pantang mundur’),nl,nl,writeq(‘mundur terus kapan majunya?’).

maju terus pantang mundur

‘mundur terus kapan majunya?’

Yes.

v   Input pernyataan

Predikat yang digunakan untuk menginput pernyataan adalah read/1 yang membutuhkan satu argument, yang harus berbentuk variable.. Pada inputan yang berasal dari keyboard,  biasanya muncul tampilan karakter prompt seperti tanda titik dua(:), yang berarti dibutuhkan inputan dari user. Nilai dari pernyataan yang kita inputkan akan diberikan kepada variable argument. Jika variable argument sudah diberikan nilai sebelumnya, maka goal akan tercapai hanya jika nilai yang diinput sama dengan nilai awalnya.

1 ?- read(X).

|: 1000.

X = 1000

Yes

2 ?- read(Y).

|: ‘jika ini maka itu’.

Y = ‘jika ini maka itu’

Yes

3 ?- X=joko,read(X).

|: joko.

X = joko

Yes

v   Input dan output menggunakan karakter

Untuk problem seperti membaca sebuah seri karakter dari keyboard dan menghitung jumlah huruf hidupnya, akan lebih efektif jika menggunakan input sebuah karakter. Untuk melakukan hal tersebut kita harus terlebih dahulu mengetahui nilai ASCII untuk sebuah karakter. Semua printing karakter dan non-printing karakter (spasi, tab) mempunyai hubungan dengan nilai ASCII, yaitu bilangan bulat dari 1 sampai 255.

Tabel berikut menggambarkan nilai angka ASCII untuk beberapa karakter utama.

v     Menampilkan Output Karakter

Menampilkan Output Karakter digunakan dalam predikat put/1. Predikat ini menggunakan satu argumen, dengan nilai berupa angka antara 0 – 255 atau pernyataan yang memiliki nilai integer sesuai batasan tadi.Penggunaan tujuan put menghasilkan sebuah karakter yang merupakan output dari urutan output. Karakter ini berhubungan dengan nilai numerik (nilai ASCII) dari argumen yang digunakan

Contoh :

?- put(97),nl.

a

yes

?- put(122),nl.

z

yes

kedua contoh di atas merupakan output dari nilai 97 dan 122. Seperti kita ketahui dalam ASCII nilai 97 dan 122 merupakan nilai untuk huruf a dan z.

v        Menginput Karakter

get0/1 dan get/1 merupakan predikat yang disediakan untuk melakukan input sebuah karakter. Predikat get0 memerlukan sebuah argumen yang variatif. Tujuan pengggunaan get0 adalah untuk membaca karakter yang d input dari sebuah urutan penginputan. Variabel inilah yang nantinya akan disatukan dengan nilai ASCII dari karakter tersebut.

Pertama kita asumsikan bahwa variabel dari argumen ini tidak terikat, nantinya variabel argumen akan terikat sesuai dengan nilai ASCII dari karakter yang diinput.

Contoh :

?- get0(N).

: a

N = 97 % nilai N merupakan nilai ASCII dari huruf a (kecil)

?- get0(N).

: Z

N = 90

Jika variabel dari argumen tersebut sudah terikat, maka tujuan akan berhasil jika dan hanya jika nilai numeriknya sama dengan nilai ASCII dari karakter yang di input.

Sebahai contoh :

?- get0(X).

: a

X = 97

?- M is 41,get0(M).

: )

M = 41 % karena nilai M sudah ditentukan 41 maka hasil nilai dari hasil inputan akan tetap sesuai dengan nilai dari M

?- M =dog,get0(M).

: )

No     % nilai dari “)” tidak terdefinisikan karena nilai M sudah ditentukan yaitu “dog” dan dog ini bukan merupakan nilai integer antara 0 – 255.

Predikat get yang menggunakan sebuah argumen, yang berupa sebuah variabel. Penggunaan predikat get0 dalam goal menyebabkan karakter bukan white-space (karakter dengan nilai ASCII kurang dari atau sama dengan 32) dibaca dari urutan input.

Sebagai contoh :

?- get(X).

: Z

X = 90

?- get(M).

:       Z

M = 90       % walaupun menggunakan “spasi” dalam melakukan input, nilai yang tetap dibaca adalah nilai dari huruf “Z”.

Penggunaan predikat readin bersifat rekursif.  Untuk contohnya adalah sebagai berikut :

readin :- get0(X),process(X).

process (42).

Process(X) : – X=\=42, write(X),nl,readin.

Jika kita lakukan inputan di atas maka akan menghasilkan

?- readin..

: Prolog Examples* % karakter yang akan dibaca

80

114

111

108

103

32

69

120

97

109

112

108

101

yes

Dari contoh di atas dapat kita lihat bahwa proses yang dilakukan untuk (process (X)) tergantung dari ada tidaknya nilai X yang memiliki nilai 42( hal ni ditandai dengan penggunaan karakter “*”) dari inputan yang dilakukan. Jika memiliki nilai tersebut, maka pencarian untuk tujuan selesai sampai tanda “*” tersebut, apabila tidak maka proses akan tetap berjalan sampai ditemukan karakter “*”.

v        File Output : Merubah Urutan Outpus Saat Ini

Menggunakan :

  • tell/1, misal tell(‘outfile.txt’)
  • told

default-nya: user

built-in:

  • told/0, tanpa argumen, menyebabkan file output ditutup dan kembali ke user
  • telling/1, tanpa argumen, menyebabkan variabel menjadi terikat dengan nama file

v        File Input : Merubah Urutan Input Saat Ini

Menggunakan:

  • see/1, misal see(‘myfile.txt’)
  • seen

default-nya: user

built-in:

  • seen/0, tanpa argumen, menyebabkan file output ditutup dan kembali ke user
  • seen/1, tanpa argumen, menyebabkan variabel menjadi terikat dengan nama file

Membaca Dari File: End Of File

Jika pada saat menjalankan perintah read(X) terjadi kegagalan maka variabel X akan menjadi terikat dengan atom end_of_file.

Jika pada saat menjalankan perintah get(X) atau get0(X) terjadi kegagalan maka variabel X akan menjadi terikat dengan nilai berupa angka tertentu.

Membaca dari File : End Of Record

Pada End of Line diindikasikan dengan karakter ASCII bernilai 13, sedangkan End of Record diindikasikan dengan 2 buah nilai karakter ASCII bernilai 13 diikuti oleh 10

Contoh:

readline:-get0(X), process(X).

process(13).

Process(X):–X=\=13, put(X), nl, readline.

Contoh Penggunaan File (mengacu pada penggunaan karakter)

Tentukan sebuah predikat copychars untuk menyalin karakter input (sebagai sebuah baris tunggal) pada user’s terminal untuk file tertentu, sampai karakter ! dimasukkan (karakter ini
tidak boleh disalin).

Pada program di bawah ini, fungsi utama copychars adalah menyimpan dan mengembalikan nilai-nilai pada aliran input dan output terakhir. Sisa tugas yang tersisa untuk copy_characters,
yang didefinisikan secara rekursif dengan cara yang mirip dengan readin dalam contoh di atas.

copychars(Outfile):- telling(T),tell(Outfile),
copy_characters,told,tell(T).
copy_characters:-get0(N),process(N).
/*     33 is ASCII value of character ! */
process(33).
process(N):-N=\=33,put(N),copy_characters.

Menggunakan copychars seperti contoh berikut

?- copychars(‘myfile.txt’).

: abxyz!

Yes
akan menempatkan karakter abxyz dalam file myfile.txt.

Berikut ini adalah salah satu contoh tugas, yang bernama makelower. Disini kita akan mencoba mengubah dari huruf besar menjadi huruh kecil

This is an Example 123 inCLUDing numbers and symbols +-*/@[]XYz

sebelumnya yang perlu kita lakukan adalah membuat file makelower.pl dahulu, di dalam file ini berisi aturan / rule untuk mengubahnya. berikut ini adalah rule yang akan kita buat :

makelower :- get0(X),process(X).

process(13).

process(X) :- X=\=13,case(X,Y),put(Y),makelower.

case(X,Y) :- 64 < X, X < 91, Y is X + 32.

case(X,Y) :- Y is X + 0.

Berikut ini adalah tampilan aturan / rule dalam notepad

Seperti biasa rule yang sudah kita buat lalu kita simpan dengan ekstensi .pl.

Setelah berhasil disimpan maka langkah selanjutnya adalah meng-consult file makelower.pl tadi ke dalam program PROLOG. Bila berhasil maka akan seperti gambar di bawah ini :

langkah berikutnya adalah mencoba aturan/rule yang kita buat tadi apakah berhasil atau tidak. Untuk mencobanya maka kita ketikkan perintah / command makelower. di PROLOG

Setelah meng-input perintah tadi lalu kita tekan tombol Enter dan kita lanjutkan dengan melakukan input terhadap kata/kalimat yang akan kita ubah menjadi lower case. Berikut ini adalah contoh kata/kalimatnya :

This is an Example 123 inCLUDing numbers and symbols +-*/@[]XYz

Setelah itu kita tekan kembali tombol Enter dan coba kita lihat hasilnya, apabila berhasil maka hasilnya akan seperti gambar di bawah ini :
Alhamdulilah, berhasil…… he5

Pada postingan terdahulu kita sudah pernah membahas mengenai sistem pakar, yaitu program yang dapat membantu kita menyelesaikan masalah layaknya seorang pakar dalam bidang tertentu, seperti kedokteran, pajak, psikologi, dan lain-lain. Dalam postingan kali ini kami mencoba menampilkan sebuah contoh sederhana dari penerapan sistem pakar dalam bidang kedokteran, yaitu diagnosis penyakit berdasarkan gejala-gejala dan beberapa solusi untuk penyembuhannya. Dalam keseharian kita, terdapat beberapa penyakit dengan gejala yang hampir mirip, sebagai contoh influenza, tipus, dan maag. Untuk dapat melakukan diagnosis dengan benar, terlebih dahulu kita harus mengetahui gejala-gejala dari penyakit tersebut. Beberapa gejala yang mungkin timbul dari ketiga jenis penyakit tersebut adalah sebagai berikut:

  1. Kepala pusing;
  2. Suhu badan tinggi;
  3. Batuk dan pilek;
  4. Badan lemas;
  5. Demam lebih dari tiga hari;
  6. Hasil cek darah menunjukkan positif salmonella paratipii
  7. Nyeri pada ulu hati;
  8. Nyeri pada lambung.

Sedangkan obat yang kami sarankan sebagai solusi untuk mengobati penyakit tersebut meliputi:

  1. Paracetamol;
  2. Antibiotik;
  3. Multivitamin;
  4. Obat anti mual;
  5. CTM (obat tidur).

Dari gejala-gejala tersebut kita dapat mengambil kesimpulan sebagai berikut :

  • Jika gejala yang timbul adalah 1, 2, dan 3 maka dia menderita influenza dan solusi obatnya adalah a, b, dan c.
  • Jika gejala yang timbul adalah 1, 4, 5, dan 6 maka dia menderita tipus dan solusi obatnya adalah a, b, c, d, dan e.
  • Jika gejala yang timbul adalah 1, 7, dan 8 maka dia menderita maag dan solusi obatnya adalah a, b, c, dan d.

Dengan menggunakan sistem pakar ini kita dapat melakukan diagnosis penyakit influenza, tipus, dan maag sehingga kita dapat melakukan pertolongan pertama pada penderita penyakit tersebut.

Kali ini kita akan mencoba untuk menggunakan Prolog dalam mengitung operasi Aritmatika. Seperti yang sudah dijelaskan sebelumnnya, program Prolog ternyata dapat juga digunakan untuk melakukan operasi aritmatika. Berikut ini kami berikan beberapa contoh dasar operasi artimatika dalam Prolog.

1. Penjumlahan dua bilangan

Untuk contoh ini kita gunakan dua argumen berupa angka yang akan dijumlahkan, misalkan X = 48 dan Y = 36. Kalau dijumlahkan melalui prolog seperti apa hasil dan bagaimana caranya? Perhatikan contoh dibawah ini :

penjumlahan_1operasi aritmatikanya terdapat pada argumen Z is X+Y,  hasilnya dapat dilihat pada baris dibawahnya yaitu nilai X = 48, nilai Y = 36 dan nilai Z (merupakan hasil penjumlahan X dan Y) = 84.

 

2. Menghitung nilai rata-rata.

Kembali kita menggunakan nilai yang sama seperti pada penjelasan mengenai penjumlahan yaitu X=48 dan Y=36. Nilai rata-rata didapatkan dengan menjumlahkan kedua bilangan kemudian membaginya sesuai dengan banyaknya bilangan yang dijumlah. Untuk lebih jelasnya kita lihat gambar dibawah ini :

rata-rata1dapat kita lihat bahwa nilai rata-rata dari 48 dan 36 adalah 42..

 

3. Akar suatu bilangan

Prolog juga dapat digunakan utnuk menghitung akar dari suatu bilangan, operator aritmatika yang digunakan adalah sqrt(X) dimana X merupakan nilai bilangan yang akan dicari akarnya. Untuk lebih jelasnya kita lihat gambar di bawah ini :

akar1di sini kami kembali menggunakan nilai X dan Y yang sama dan Z merupakan nilai akar dari penjumlahan X dan Y.

 

4. Mencari nilai yang terbesar antara dua bilangan.

Prolog juga bisa digunakan untuk menentukan nilai terbesar dari dua bilangan atau lebih. Operator aritmatika yang digunakan adalah max(X,Y) untuk contoh lebih jelasnya dapat dilihat pada gambar dibawah ini :

terbesar1sebagai contoh kami menggunakan nilai X dan Y yang sama dengan operasi sebelumnya, yaitu X=48 dan Y=36. Setelah dilakukan operasi aritmatikanya maka dapat diperoleh nilai terbesar adalah X yaitu 48..

 

Sekian dulu gambaran sederhana dari kami mengenai pengenalan penggunaan Prolog dalam operasi Aritmatika. Semoga dapat membuka wawasan dan menambah ilmu kita. Sekian dan terimakasih.

Selamat berjumpa kembali dengan kami, kali ini kami akan mencoba untuk menjelaskan mengenai Operator dan Aritatika dalam Prolog. Semoga penjelasan kami dapat memudahkan kawan-kawan dalam mempelajari penggunaan Prolog nantinya.

OPERATOR

Ada beberapa cara penulisan notasi untuk predikat tunggal dan ganda.

  • Dengan menggunakan tanda kurung (parentheses) seperti yang sudah digunakan pada tutorial sebelumnya. Contoh : likes(john,mary).
  • Dengan menggunakan operator sisip (infix operator), yaitu functor (nama predikat) ditulis di antara dua argument tanpa menggunakan tanda kurung. Contoh : john likes mary.
  • Dengan menggunakan prefix operator. Cara ini digunakan untuk menuliskan predikat dengan satu argument (predikat tunggal) dengan menuliskan predikat sebelum argument tanpa ada tanda kurung. Contoh isa_dog fred sebagai ganti dari isa_dog(fred)
  • Dengan menggunakan operator posfiks yaitu predikat ditulis setelah argument. Contoh fred isa_dog.

Notasi operator dapat digunakan untuk mempermudah pembacaan sebuah rule. Sebagai contoh ada rule sebagai berikut:

Likes(john,X):-  is_female(X),owns(X,Y),isa_cat(Y).

Rule tersebut dapat lebih mudah dipahami jika ditulis sebagai berikut:

John likes X :- X is female, X owns Y,Y isa_cat.

Predikat dengan satu atau dua argumen dapat diubah menjadi sebuah operator dengan memasukkan sebuah goal menggunakan predikat op pada system prompt. Contohnya :

?-op(150,xfy,likes).

Argumen pertama adalah operator preseden yaitu integer dari 0 ke atas. Angka yang lebih rendah memiliki tingkat presedensi lebih tinggi.

Argumen kedua biasanya dapat berupa tiga atom berikut:

  • xfy: predikatnya biner dan diubah menjadi operator infiks.
  • xf : predikatnya tunggal dan diubah menjadi operator prefix.
  • fy : predikat tunggal dan diubah menjadi operator postfix.

Argumen ketiga merupakan nama predikat yang diubah ke sebuah operator.

Aritmatika

Selain untuk menyelesaikan operasi-operasi non angka, Prolog juga dapat digunakan untuk operasi aritmatika. Hal ini dilakukan dengan menggunakan predikat yang sudah built in, yaitu is/2 yang merupakan operator infiks yang ditulis diantara dua argument.

Contoh

X is -6.5 yang berarti memberikan nilai -6.5 kepada variable X.

Contoh lain yaitu operasi yang melibatkan lebih dari satu variable yaitu

X is 6*Y+Z-3.2+P-Q/4.

Variable-variable yang digunakan pada operasi aritmatika harus diberikan nilainya dulu yang berupa angka.

Contoh

?-Y is 10,Z is Y+1.

Y = 10

Z = 11

Operator-operator aritmatika meliputi +-*/. Selain itu terdapat juga fungsi aritmatika yang digunakan untuk menghitung nilai tertentu, seperti fungsi sqrt(X) yang digunakan untuk mencari akar kuadrat dari suatu bilangan.

?- X is sqrt(36).

X = 6.

Operator – tidak hanya digunakan sebagai operator infiks (digunakan untuk mencari selisih dari dua bilangan) tetapi juga digunakan sebagai operator prefix untuk menyatakan nilai negative dari sebuah bilangan. Contoh :

X is 10, Y is -X-2.

X = 10

Y = -12

Operator aritmatika dan fungsi aritmatika yang terdapat dalam prolog dapat ditunjukkan pada table di bawah ini.

Picture 5_lzn

Contoh

?- X is 30,Y is 30,Z is X+Y.

X = 30

Y = 30

Z = 60

Di samping predikat is digunakan seperti pada contoh di atas, argument pertama dapat juga sebuah angka atau variable terikat yang memiliki nilai berupa angka. Dalam kasus seperti ini, nilai angka dari dua argument dihitung. Hasil diteruskan jika angkanya sebanding. Jika tidak berarti gagal.

Contoh:

?- X is 7,X is 6+1.

X = 7

?- 10 is 7+13-11+9.

no

?- 18 is 7+13-11+9.

yes

Dari penggunaan operator is/2 ini muncul konsep unifikasi,yaitu

  • Jika argument pertama adalah variable tidak terikat, nilai dari argument kedua diberikan dan tujuan dari is berhasi.
  • Jika argument pertama adalah sebuah angka atau variable terikat bernilai angka, angka ini dibandingkan dengan nilai dari argument kedua. Jika nilainya sama, maka tujuan tercapai dan jika sebaliknya berarti gagal.

Perhatikan bahwa tujuan dari X is X+1 akan selalu gagal, baik X itu terikat maupun tidak terikat.

?- X is 10,X is X+1.

no

Jika kita ingin menambah sebuah nilai dengan satu, seharusnya menggunakan aturan sebagai berikut

increase(N,M):-M is N+1.

?- increase(4,X).

X = 5

Operator preseden pada ekspresi aritmatika

Jika dalam satu ekspresi aritmatika terdapat lebih dari satu operator, maka prolog membutuhkan sarana untuk memutuskan operator mana yang akan dieksekusi lebih dahulu. Pada dasarnya Prolog akan mengikuti urutan operator sebagai berikut */+-. Jika operatornya memiliki preseden yang sama, eksekusi dilakukan dari kiri ke kanan.

Ini berarti jika kita menuliskan perintah A+B*C-D, Prolog akan membaca B kali C dulu kemudian ditambah A kemudian dikurangi D. Jika kita menghendaki urutan operasi yang berbeda dapat dilakukan dengan pemberian tanda kurung. Misalkan (A+B)*(C-D), yang berarti A ditambah B dulu baru hasilnya dikalikan dengan nilai C dikurangi D.

Operator Relasional

Operator relasional digunakan untuk membandingkan dua ekpresi aritmatika.

Operator relasional terdiri atas:

=:=   sebanding dengan

=\=   tidak sebanding dengan

>   lebih besar dari

>=   lebih besar atau sama dengan

<   lebih kecil dari

<= lebih kecil atau sama dengan

?- 88+15-3=:=110-5*2.

yes

?- 100=\=99.

yes

Equality Operator (Operator persamaan)

ada tipe operator relasional dalam Prolog untuk pengetesan persamaan atau pertidaksamaan. Tipe pertama digunakan untuk membandingkan nilai aritmatika sedangkan dua tipe lainnya digunakan untuk membandingkan pernyataan (terms).

Persamaan ekspresi aritmatika E1=:=E2

E1=:=E2  berhasil(bernilai benar) jika ekspresi aritmatika E1 dan E2 menghasilkan nilai yang sama.

Contoh

?- 6+4=:=6*3-8.

yes

?- sqrt(36)+4=:=5*11-45.

yes

Untuk mengecek apakah sebuah angka itu genap atau ganjil dapat menggunakan predikat checkeven/1 (nama checkeven hanya sebuah contoh, dapat diganti dengan nama lain yang dikehendaki) sebagai berikut

checkeven(N):-M is N//2,N=:=2*M.

?- checkeven(12).

yes

?- checkeven(23).

no

?- checkeven(-11).

no

?- checkeven(-30).

Yes

Pertidaksamaan ekspresi aritmatika =\=

E1 =\=E2 berhasil jika ekspresi aritmatika E1 dan E2 menghasilkan nilai yang tidak sama.

?- 10=\=8+3.

Yes

Term Identik = =

Kedua argument dari operator infiks = = harus berupa term/pernyataan. Tujuan berhasil jika dan hanya jika term 1 sama (identik) dengan term2.

?- likes(X,prolog)==likes(X,prolog).

X = _

?- likes(X,prolog)==likes(Y,prolog).

no

(X and Y adalah variable yang berbeda)

?- X is 10,pred1(X)==pred1(10).

X = 10

?- X==0.

no

?- 6+4==3+7.

No

(term 6+4 berbeda dengan term 3+7)

Term tidak identik \= =

Term1\==term2 mengetes apakah term1 tidak sama (tidak identik) dengan term2. Tujuan berhasil jika term1==term2 gagal, dan sebaliknya.

?- pred1(X)\==pred1(Y).

X = _ ,

Y = _

?- pred1(X)\==pred1(X).

No

Term identik dengan unifikasi =

Operator persamaan term = mirip dengan = = dengan satu perbedaan mendasar. Tujuan dari term1=term2 berhasil jika term1 dam term2 bersatu, yaitu ada nilai dari sebuah variable yang membuat term itu identik.

?- pred1(X)=pred1(10).

X = 10

(variable X bernilai 10  yang membuat kedua term identik)

?- likes(X,prolog)=likes(john,Y).

X = john ,

Y = prolog

?- likes(X,prolog)=likes(Y,prolog).

X = Y = _

?- likes(X,prolog)=likes(Y,ada).

no

Non-unifikasi antara dua term \=

Tujuan term1\=term2 berhasil jika term1=term2 gagal dan keduaterm tidak bisa disatukan.

?- 6+4\=3+7.

yes

?- likes(X,prolog)\=likes(X,ada).

X = _

Operator Logika

Pada bagian ini hanya membahas dua jenis operator logika saja yaitu operator not dan disjungsi.

Not operator (operator negasi)

Tujuan operator negasi menghasilkan nilai yang bertentangan dari nilai asalnya.

Contoh dalam database berisi:

dog (fido)

?- not dog(fido).

no

?- X=0,not X is 0.

no

Operator disjungsi

Operator disjungsi merepresentasikan ‘or’ (atau). Operator disjungsi merupakan operator infiks yang akan bernilai benar (yes) apabila salah satu dari goal1 atau goal2 bernilai benar.

?- 6<3;7 is 5+2.

yes

?- 6*6=:=36;10=8+3.

yes

 

Berikut ini kami berikan sebuah contoh perubahan / konversi operator dengan menggunakan file animal.pl yang sebelumnya sudah dibuat.

 

dog(fido).large(fido).
cat(mary).large(mary).
dog(rover).small(rover).
cat(jane).small(jane).
dog(tom).small(tom).
cat(harry).
dog(fred).large(fred).
cat(henry).large(henry).
cat(bill).
cat(steve).lare(steve).
large(jim).
large(mike).
large_dog(X) :- dog(X), large(X).
small_animal (A) :- dog(A), small(A).
small_animal (B) :- cat(B), small(B).
chases (X,Y) :- large_dog(X), small_animal(Y), write(X), write(‘chases’),write(Y),nl.

file di atas merupakan file animal.pl yang belum di konversi operatornya, untuk file yang sudah di konversi dapat dilihat pada gambar di bawah ini :

animal22

 

konversi yang dilakukan adalah dengan merubah :

dog(fido) menjadi fido isa_dog dengan menggunakan ?- op(150,xf,isa_dog).

cat(mary) menjadi mary isa_cat dengan menggunakan ?- op(150,xf,isa_cat).

large(mary) menjadi mary is_large dengan menggunakan ?- op(150,xf,is_large).

small(rover) menjadi rover is_small dengan menggunakan ?- op(150,xf,is_small).

large_dog(X) menjadi X isa_large_dog dengan menggunakan ?- op(150,xf,isa_large_dog).

small_animal(A) menjadi A isa_small_animal dengan menggunakan ?- op(150,xf,isa_small_animal).

chases(X,Y) menjadi X chases Y dengan menggunakan ?- op(150,xfy,chases).

Setelah kita consult file animal.pl yang baru kita konversi, kemudian kita jalankan file tersebut dengan tujuan untuk mengetahui siapa mengejar siapa ( X chases Y ) maka hasilnya adalah seperti gambar dibawah ini :


prolog_animal2

Demikian hasil postingan kami mengenai Operator dan Aritmatika dalam Prolog, semoga dapat memberikan tambahan pengetahuan bagi kita semua.

 

 

 

Di dalam perspektif ilmu pengetahuan dan teknologi, expert system/sistem pakar merupakan bagian dari bidang kecerdasan buatan (Artificial Intellegence). Istilah expert system berasal dari knowledge-based expert system (sistim pakar berbasis pengetahuan), yaitu sistem berbasis komputer (paket program komputer) yang menggunakan pengetahuan, fakta, dan teknik penalaran dalam memecahkan masalah yang biasanya hanya dapat dipecahkan oleh seorang pakar dalam bidang tertentu seperti kedokteran, farmasi, dan ekonomi. Sistem pakar dapat digunakan untuk memecahkan masalah yang tidak terstruktur dan tidak ada suatu prosedur tertentu untuk memecahkan masalah tersebut.

Penggunaan Knowledge-based expert system (sistem pakar berbasis pengetahuan) ini tidak menjamin solusi yang lebih akurat, tetapi paling tidak mampu menghasilkan keputusan-keputusan yang didasari informasi relatif lebih banyak / terstruktur. Sesuai dengan namanya, suatu “Sistem Pakar” akan sangat tergantung pada pengetahuan (knowledge) yang didapat dari pakar yang menyumbangkan keahlian dan pengalamannya.

Ciri-ciri yang dimiliki sistem pakar sebagai berikut:

  1. Terbatas pada bidang yang spesifik.
  2. Dapat memberikan penalaran terhadap data-data yang tidak lengkap atau tidak pasti.
  3. Dapat mengemukakan rangkaian alasan diberitahukan dengan cara yang dapat dipahami.
  4. Berdasarkan pada rules dan kaidah tertentu.
  5. Dirancang untuk dapat dikembangkan secara bertahap.
  6. Keluaran (output) bersifat nasihat atau anjuran.
  7. Keluaran tergantung dengan user.
  8. Knowledge based dan inference engine terpisah.

Keunggulan sistem pakar :

  1. Kemampuan menghimpun data dalam jumlah yang sangat besar.
  2. Kemampuan menyimpan data  tersebut untuk jangka waktu yang panjang dalam suatu bentuk yang tertentu.
  3. Kemampuan mengerjakan perhitungan secara tepat dan tepat dan mampu mencari kembali data yang tersimpan dengan kecepatan tinggi.

Kekurangan sistem pakar:

  1. Sistem pakar hanya dapat menangani pengetahuan yang konsisten. Untuk pengetahuan yang cepat berubah-rubah dari waktu ke waktu, maka knowledge base di sistem pakar harus selalu diubah.
  2. Sistem pakar tidak dapat menangani hal yang bersifat judgement. Sistem pakar memberikan hasil yang pasti, sehingga keputusan akhir pengambilan keputusan jika melibatkan kebijaksaaan dan institusi masih tetap di tangan manajemen.
  3. Format knowledge base sistem pakar terbatas. Knowledge base pada sistem pakar berisi aturan-aturan (rules) yang ditulis dalam bentuk statemen if-then.

Rule Based Expert System

Rule based expert system adalah program komputer yang memproses informasi berisi permasalahan spesifik dalam memori kerja dengan sejumlah rules yang terdapat di dalam pengetahuan dasar, menggunakan inference engine untuk memprediksi informasi baru.

Komponen Expert System

  • Inference Engine: Model penalaran manusia dengan mengkombinasikan fakta fakta yang terdapat pada memori kerja mencocokan kaidah-kaidah yang terdapat dalam pengetahuan dasar untuk memprediksi informasi baru.
  • Working memory: Dimodelkan sebagai memori manusia yang disimpan dalam masa yang singkat dan berisi permasalahan fakta yang ada dan memprediksi rule yang dipergunakan.
  • Explanation Facilities: Komponen tambahan yang meningkatkan kemampuan sistem pakar. Komponen ini menggambarkan penalaran sistem kepada pemakai. Fasilitas penjelas dapat menjelaskan perilaku sistem pakar dengan menjawab pertanyaan-pertanyaan.
  • Knowledge based (basis pengetahuan): merupakan hasil akuisisi dan representasi pengetahuan dari seorang pakar. Basis pengetahuan membentuk sumber sistem kecerdasan dan digunakan oleh mekanisme inferensi untuk melakukan penalaran dan menarik kesimpulan. Basis pengetahuan dapat dihasilkan dari berbagai sumber, seperti buku, laporan, basis data, studi kasus, data empiris, dan pengalaman pribadi. Sumber pengetahuan yang dominan pada sitem pakar saat ini kebanyakan dari para pakar.
  • External Program: Program seperti database, algoritma yang dipergunakan dan sebagainya, yang berperan mendukung kerja sistem.
  • User Interface : Penghubung antara program sistem pakar dengan pengguna. Pada bagian ini terjadi dialog antara program dan pengguna. Program sistem pakar akan mengambil kesimpulan berdasarkan jawaban-jawaban dari pengguna.
  • Developers Interface: Wahana rekayasa pengetahuan dalam pengembangan sistem.

* diolah dari berbagai sumber.


Selamat berjumpa kembali rekan-rekan…

Kali ini kita akan membahas masalah Facts, Rules, Predicate dan Variable di Prolog . Ada 2 contoh kasus yang akan kita ujicobakan untuk langsung dipraktekkan dan jangan takut Insyaallah mudah dipahami. Lansung saja kita mulai ya…

Kasus 1.

Untuk kasus pertama, misalkan kita diberikan sebuah program sebagai berikut :

/* Animals Database */
animal(mammal,tiger,carnivore,stripes).
animal(mammal,hyena,carnivore,ugly).
animal(mammal,lion,carnivore,mane).
animal(mammal,zebra,herbivore,stripes).
animal(bird,eagle,carnivore,large).
animal(bird,spparrow,scavenger,small).
animal(reptile,snake,carnivore,long).
animal(reptile,lizard,scavenger,small).

Tugas kali ini adalah untuk mencari

  1. all the mammals
  2. all the carnivore that are mammals
  3. all the mammals with stripes
  4. whether there is a reptile that has a mane

Lalu bagaimana cara mencarinya? Untuk mengetahuinya, langsung saja kita coba yuk.

  • Langkah pertama adalah kita menuliskan program ini dalam ke dalam Notepad(ingat tuorial minggu lalu ya…. jika lupa) dan kita simpan dengan nama Animal.pl (ingat agar bisa di gunakan di program Prolog selalu simpan dengan ekstensi *.pl.  dan apabila sudah selesai lalu kita jalankan melalui program Prolog. Caranya bagaimana? Kan minggu lalu sudah kita bahas, kalau lupa kita review lagi deh. File Animal.pl yang sudah kita buat tadi kita jalankan di Prolog dengan cara membukannya melalui File–>Consult–> lalu pilih file yang tadi kita buat.

Animals1

begini hasilnya jika benar.

  • Sekarang kita coba untuk mejawab satu-persatu pertanyaan di atas. Pertanyaan pertama adalah menampilkan semua mammals. Terus gimana caranya? Yang perlu dilakukan adalah mengetikkan ” animal(mammal,X,Y,Z). ” ingat ya tanpa menggunakan tanda . Hasilnya seperti gambar di bawah ini :

 Animals2

hasilnya adalah semua binatang berjenis mamalia di tampilan di layar.

  • Berikutnya untuk pertanyaan all the carninore that are mammals kalau dalam bahasa Indonesia artinya menampilkan semua hewan karnivora yang termasuk mamalia. Caranya?  Kita ketikkan “animal(mammal,X,carnivore,Z).“  Benar tidak ya? Coba kita lihat pada gambar berikutnya :Animals3

hasilnya benar. Di layar menampilkan semua karnivora yang termasuk mamalia. Lanjut ya, masih ada 2 lagi pertanyaan untuk tugas pertama ini.

  • Pertanyaan ketiga adalah all the mammals with stripes. Ehm…. menampilkan semua mamalia yang memiliki corak bergaris. Caranya bagaimana? Untuk pertanyaan ini yang kita ketikkan adalah perintah “animal(mammal,X,Y,stripes).“  Kita lihat hasilnya bersama-sama
  • Animals4

ternyata ada 2 binatang mamalia yang bercorak garis. Alhamdulilah, lanjut ke pertanyaan berikutnya.

  • Pertanyaan terakhir untuk tugas pertama ini adalah menampilkan whether there is a reptile that has a mane. Caranya gimana gan? Begini caranya, yang perlu kita lakukan adalah mengetikkan “animal(reptile,X,Y,mane).” Terus hasilnya bagaimana? Kita saksikan gambar berikut ini :
  • Animals5

lho kok hasilnya hanya false ? Ya pasti false, karena pada program yang kita buat tadi (Animals.pl) tidak terdapat reptile yang bertaring. Benar kan?. Alhamdulilah tugas pertama selesai. Ayo masih ada tugas kedua!!!!!!!

Kasus 2.

Disini kita sedikit bermain-main dengan pasangan. Ceritanya kita ini adalah Biro Jodoh. Tugas kita adalah membuat kemungkinan pasangan yang bisa dibuat berdasarkan data yang ada. Berikut ini adalah data-data yang kita miliki :

/* Dating Agency Database */
person(bill,male).
person(george,male).
person(alfred,male).
person(carol,female).
person(margareth,female).
person(jane,female).

seperti biasa kita simpan data dahulu dalam bentuk .pl semisal kita beri nama Kencan.pl lalu kita load ke dalam Prolog melalui menu Consult. Lalu cara menemukan kemungkinan pasangan yang akan terjadi bagaimana? Caranya adalah kita menambahkan rule “couple(X,Y):-person(X,male),person(Y,female).” ke dalam file Kencan.pl yang tadi kita buat. Sehingga nantinya di dalam file akan berbentuk seperti ini :

Kencan1

 Kemungkinan pasangan yang akan terjadi adalah pasangan antara Male dan Female. Bagaimana cara membuktikannya?

Setelah kita me-load file Kencan.pl tadi ke program Prolog, kita bisa ketikkan “couple(X,Y).”  Sekarang coba kita lihat hasilnya :

Kencan2

 nah pada angka 2 menunjukkan jumlah kemungkinan pasangan yang bisa terjadi. Sepertinya cukup sekian dulu ya rekan-rekan sekalian. Kita coba lagi di lain waktu untuk tugas-tugas yang lain. Tetap semngat dan jangan menyerah!!!!

Contoh : kita memiliki dua himpunan, himpunan laki-laki terdiri atas eko dan hari dan himpunan perempuan terdiri atas ayu dan nisa. Buat file sumber dengan ekstensi .pl dengan menggunakan teks editor, dalam contoh kali ini menggunakan notepad. Berikut ini adalah tampilan dalam bentuk notepadnya :

a1

Setelah disimpan dengan format *.pl maka langkah berikutnya adalah membuka file tersebut menggunakan program PROLOG. Caranya adalah buka program prolog akan keluar tampilan awal seperti gambar di bawah ini

2a

Untuk mengeksekusi file yang tadi sudah kita buat, masuk ke tab file pilih menu consult

3a

Pilih file pada direktori tempat file disimpan kemudian klik open :

4a

Jika tidak terdapat eror pada file yang kita buka, tampilan prolog menjadi seperti gambar berikut :

5a

Untuk mengetahui kombinasi yang mungkin terjadi ketik perintah : Laki-laki(X),perempuan(Y).

6a

Demikianlah sedikit tutorial mengenai kombinasi dua himpunan dengan menggunakan program PROLOG. Terimakasih dan mohon sarannya.

Follow

Get every new post delivered to your Inbox.