Selasa, 08 Desember 2009

Summary Chapter 6

Sebagian besar bahasa pemrograman mempunyai fasilitas untuk melakukan perulangan/looping, namun tidak begitu dengan prolog. Sebagai pegganti dari looping, user dapat menggunakan backtracking, rekursi, built-in predikat, atau kombinasi dari ketiganya untuk mendapat efek yang sama dengan looping.

6.1 Looping a Fixed Number of Times
Banyak bahasa pemrograman menyediakan ‘untuk loop’ yang memungkinkan satu set instruksi akan dieksekusi tetap beberapa kali. Tidak ada fasilitas tersebut tersedia dalam Prolog (secara langsung), tetapi efek yang sama dapat diperoleh dengan menggunakan rekursi.

Contoh:

loop(0).
loop(N):-N>0,write(‘The value is: ‘),write(N),nl,
M is N-1,loop(M).

6.2 Looping Until a Condition Is Satisfied

Banyak bahasa pemrograman memiliki kondisi ’until loop’ yang memungkinkan sebuah set instruksi yang akan dieksekusi berulang kali sampai kondisi tertentu terpenuhi. Namun di prolog kondisi itu tidak ada dan untuk memperoleh efek yang sama dengan menggunakan:

a. Rekursi.

b. Repeat predicat

6.3 Backtracking with Failure

Prolog backtracking berfungsi untuk pencarian melalui database untuk menemukan semua klausa dengan properti tertentu. Berikut adalah fungsi Prolog Backtracking secara lebih rinci:

6.3.1 Searching the Prolog Database

6.3.2 Finding Multiple Solutions


Chapter Summary

This chapter describes how a set of goals can be evaluated repeatedly in Prolog,

either a fixed number of times or until a specified condition is met, and how

multiple solutions can be arrived at using the technique of 'backtracking with

failure'.

INPUT AND OUTPUT IN PROLOG

1. Tetapkan predikat untuk output nilai kuadrat dari N1 sampai N2 dimana N1=6 dan N2=12.

Langkah-langkahnya adalah sebagai berikut :

a. Buatlah rule seperti dibawah ini di notepad

b. Simpan file tersebut dengan format.pl

c. Buka aplikasi program SWI prolog,kemudian pilih menu file pilih consult.

d. Pilih file yang di simpan sebelumnya.

e. Pada SWI prolog,ketik kata “outsquare(N1,N2)” dan harus di akhiri dengan tanda titik.

f. Kemudian tekan Enter,maka akan muncul tampilan seperti ini :

g. Selesai

2. Menetapkan dan menguji predikat dalam rangkaian huruf dari inputan user dan menampilkan semua inputan tersebut sebelum barisan baru yang pertama atau huruf.

Langkah-langkahnya adalah sebagai berikut :

a. Buatlah rule seperti dibawah ini di notepad

b. Simpan file tersebut dengan format.pl

c. Buka file yang telah di simpan tersebut,maka otomatis akan dibuka pada aplikasi SWI Prolog.

d. Ketik kata “go” yang harus di akhiri dengan tanda titik.

e. Ketiklah kata-kata yang anda inginkan,maka akan muncul tampilan seperti ini

f. Selesai.

2. 3. Gunakan klausa person seperti yang diberikan pada Section 6.3.1,temukan profesi dari semua itu yang umurnya di atas 40.

Langkah-langkahnya adalah sebagai berikut :

a. Buatlah rule seperti dibawah ini di notepad

b. Simpan file tersebut dengan format.pl

c. Buka file yang telah di simpan tersebut,maka otomatis akan dibuka pada aplikasi SWI Prolog.

d. Ketik kata “find” yang harus di akhiri dengan tanda titik.

e. Tekan Enter,maka akan muncul tampilan seperti berikut :

f. Karena yang kita cari hanya profesi orang yang berumur diatas 40 maka selasai sudah programnya.







Senin, 07 Desember 2009

SUMMARY CHAPTER 5

Pendahuluan

Prolog memiliki fasilitas untuk mengaktifkan input dan output baik dari istilah atau karakter.
Menggunakan istilah lebih sederhana dan akan dijelaskan terlebih dahulu. Awalnya, maka akan diasumsikan bahwa
semua output ke layar pengguna dan semua input adalah dari pengguna keyboard. Masukan dan
output menggunakan file eksternal, e.g. pada hard disk atau CD-ROM, akan dijelaskan dalam
Bagian 5,7 dan seterusnya. Perhatikan bahwa, seperti banyak lainnya predikat built-in, mereka untuk masukan
dan output yang dijelaskan dalam bab ini adalah semua unresatisfiable, yaitu mereka selalu gagal
ketika kemunduran.

5,1 Syarat keluaran

predikat built-in utama yang disediakan untuk istilah output write/ 1, yang di gunakan dalam resume ini

write/ 1 predikat mengambil satu argumen, yang harus yang valid dengan syarat prolog. Evaluasi predikat menyebabkan syarat akan ditulis ke current output stream, , yang secara default adalah layar user.

Built-in predikat nl / 0 juga telah digunakan berkali-kali sebelumnya dalam hal ini

buku. Tanpa membutuhkan argumen. Mengevaluasi sebuah tujuan nl menyebabkan baris baru untuk menjadi output untuk

output stream.

Contoh

? – write(26), nl.

26

ya

? – write( ’string karakter’), nl.

string karakter

ya

? – write([a, b, c, d, [x, y, z]]), nl.

[a, b, c, d, [x, y, z]]

ya

? – write (mypred (a, b, c)), nl.

mypred (a, b, c)

ya

? – write( ‘Contoh useran nl’), nl, nl, write( ‘akhir contoh’), nl.

Contoh useran nl

contoh akhir

ya

Perhatikan bahwa atom yang harus dikutip pada input (misalnya ‘Paulus’, ‘hello world’) tidak

dikutip ketika output menggunakan menulis. Jika penting untuk output tanda kutip, yang

writeq / 1 predikat dapat digunakan. Hal ini identik dengan write/ 1, kecuali bahwa atom yang

memerlukan tanda kutip untuk input adalah output antara tanda kutip (atom lain tidak).

? – writeq ( ’string karakter’), nl.

’string karakter’

ya

?-writeq (anjing), nl.

anjing

ya

? – writeq ( ‘anjing’), nl.

anjing

ya

5,2 Syarat Masukan

Built-in predikat read/ 1 disediakan untuk memasukkan istilah. Dibutuhkan satu argumen,

yang harus menjadi variabel.

Mengevaluasi itu menyebabkan istilah berikutnya untuk dibaca dari input stream,

yang secara default adalah user keyboard.

Dalam input stream, istilah harus diikuti oleh sebuah titik (‘.’) dan setidaknya satu

spasi putih, seperti spasi atau baris baru. Titik dan spasi karakter dibaca dalam tetapi tidak dianggap bagian dari istilah.

Perhatikan bahwa untuk input dari keyboard (hanya) sebuah prompt karakter seperti titik dua

biasanya akan ditampilkan untuk menunjukkan bahwa input user diperlukan. Mungkin perlu

untuk tekan tombol ‘kembali’ tombol sebelum Prolog akan menerima input. Kedua tidak

berlaku untuk input dari file. Ketika sebuah tujuan membaca dievaluasi, istilah input disatukan dengan argumen variabel. Jika variabel tidak terikat (yang biasanya terjadi) itu adalah terikat pada

input nilai.

? – Read (X).

: Jim.

X = jim

? – Read (X).

: 26.

X = 26

? – Read (X).

: Mypred (a, b, c).

X = mypred (a, b, c)

? – Read (Z).

: [A, b, mypred (p, q, r), [z, y, x]].

Z = [a, b, mypred (p, q, r), [z, y, x]]

? – Read (Y).

: ‘String karakter’.

Y = ’string karakter’

Jika variabel argumen sudah terikat , tujuan berhasil jika input istilah identik dengan nilai terikat sebelumnya.

? – X = fred, read (X).

: Jim.

tidak

? – X = fred, read (X).

: Fred.

X = fred

5,3 INPUT dan OUTPUT MENGGUNAKAN KARAKTER

Meskipun input dan output sangat mudah,tapi useran tanda kutip dan titik dapat menjadi rumit dan tidak selalu sesuai. Sebuah pendekatan yang lebih baik untuk masalah semacam ini adalah untuk input sebuah karakter pada satu waktu. Untuk melakukan hal ini, pertama-tama perlu

untuk mengetahui tentang nilai ASCII karakter.

Semua mencetak karakter dan banyak karakter non-cetak (seperti ruang dan

tab) memiliki sesuai ASCII (American Standard Code for Information

Interchange) nilai, yang merupakan integer 0-255. Tabel di bawah ini memberikan nilai ASCII numerik yang sesuai

9 Tab
10 End of record
32 Space
33 !
34
35 #
36 $
37 %
38 &
39
40 (
41 )
42 *
43 +
44 ,
45 -






46 .
48-57 0-9
58 :
59 ;
60 <
61 =
62 >
63 ?
64 @
65-90 A to Z
91 [
92 \
93 ]
94 ^
95 _
96 `
97-122 a to z
123 {
124 |
125 }
126 ~

`








5,4 Karakter Keluaran

Karakter adalah output dengan menggunakan built-in predikat meletakkan / 1. Predikat mengambil

argumen tunggal, yang harus menjadi nomor 0-255 atau ekspresi yang

mengevaluasi ke integer dalam jangkauan.

Mengevaluasi tujuan put menyebabkan satu karakter untuk menjadi output untuk saat ini

output stream. Ini adalah karakter yang sesuai dengan nilai numerik (ASCII

nilai) dari argumen, misalnya

?- put(97),nl.

a

yes

?- put(122),nl.

z

yes

?- put(64),nl.

@

Yes


5,5 Karakter Masukan

Dua predikat built-in disediakan untuk memasukkan satu karakter: get0 / 1 da n get/ 1.

Get0 predikat yang mengambil satu argumen, yang harus menjadi variabel. Mengevaluasi

tujuan get0 menyebabkan karakter untuk dibaca dari input saat ini stream. Variabel

kemudian disatukan dengan nilai ASCII karakter ini.

Mengasumsikan argumen variabel tak terikat (yang biasanya akan terjadi), itu

terikat ke nilai ASCII karakter input.

? – Get0 (N).

: A

N = 97

? – Get0 (N).

: Z

N = 90

Logika Pemrograman Dengan 74 Prolog

? – Get0 (M)

)

M = 41

Jika variabel argumen sudah terikat, tujuan berhasil jika dan hanya jika memiliki

nilai numerik yang sama dengan nilai ASCII karakter input.

?- get0(X).

: a

X = 97

?- M is 41,get0(M).

: )

M = 41

?- M=dog,get0(M).

: )

no

?- M=41.001,get0(M).

: )

No

predikat mengambil satu argumen, yang harus menjadi variabel. Mengevaluasi

get berikutnya menyebabkan tujuan non-white-space karakter (yaitu ASCII karakter dengan

nilai kurang dari atau sama dengan 32) untuk dibaca dari input saat ini stream. Itu

variabel ini kemudian disatukan dengan nilai ASCII karakter ini dengan cara yang sama seperti

untuk get0.

?- get(X).

: Z

X = 90

?- get(M).

: Z

M = 90


5,6 Contoh Menggunakan Karakter

Contoh pertama menunjukkan bagaimana membaca dalam serangkaian karakter dari keyboard

finishing dengan * dan untuk output nilai-nilai ASCII yang berhubungan satu per baris

predikat readin didefinisikan secara rekursif. Ini menyebabkan satu karakter untuk

input dan variabel X untuk terikat kepada para (numerik) nilai ASCII. Tindakan diambil

(proses (X) tujuan) tergantung pada apakah atau tidak X memiliki nilai 42 berarti a *

karakter. Jika memiliki, evaluasi tujuan berhenti. Jika tidak, nilai dari X adalah output,

diikuti oleh baris baru, diikuti dengan sebuah panggilan ke readin lebih lanjut. Proses ini berlangsung

tanpa batas waktu sampai a * karakter yang dibaca. (Pada contoh di bawah ini, nilai-nilai ASCII

karakter P, r, o dll benar ditunjukkan untuk menjadi sebesar 80, 114, 111 dll)

?- readin.

: Prolog Example*

80

114

111

108

111

103

32

69

120

97

109

112

108

101

Yes

Contoh berikut adalah versi yang diperluas di atas. Kali ini ASCII

nilai-nilai input adalah karakter yang tidak output, tetapi jumlah karakter

(termasuk *) adalah output. Predikat hitungan didefinisikan dengan dua argumen

yang dapat dibaca sebagai ‘jumlah karakter dihitung sejauh ini’ dan ‘jumlah total

karakter sebelum * ‘.

go(Total):-count(0,Total).

count(Oldcount,Result):-

get0(X),process(X,Oldcount,Result).

process(42,Oldcount,Oldcount).

process(X,Oldcount,Result):-

X=\=42,New is Oldcount+1,count(New,Result).

Contoh terakhir adalah program rekursif, yang didasarkan pada dua sebelumnya, yang

menunjukkan bagaimana membaca dalam serangkaian diakhiri dengan karakter * dan menghitung jumlah

vokal. Karakter dibaca dalam satu demi satu sampai sebuah karakter dengan nilai ASCII 42

(menandakan *) adalah dijumpai.

Di sini, dua argumen dari predikat hitungan dapat diartikan sebagai “

jumlah vokal sejauh ini ‘dan’ jumlah total vokal ‘. Tiga argumen

proses predikat dapat dibaca sebagai “nilai ASCII karakter input ‘,’ yang

jumlah vokal sampai dengan tetapi tidak termasuk karakter ‘dan’ jumlah total

vokal ‘, masing-masing.

Pertama dua argumen dari predikat processChar dapat ditafsirkan dalam

cara yang sama seperti untuk proses, tetapi argumen ketiga adalah “jumlah vokal hingga dan

termasuk karakter (argumen pertama) ‘.

Predikat vokal tes untuk salah satu dari 10 kemungkinan vokal (lima huruf dan

lima huruf kecil), menggunakan nilai-nilai ASCII.

go(Vowels):-count(0,Vowels).

count(Oldvowels,Totvowels):-

get0(X),process(X,Oldvowels,Totvowels).

process(42,Oldvowels,Oldvowels).

process(X,Oldvowels,Totalvowels):-

X=\=42,processChar(X,Oldvowels,New),

count(New,Totalvowels).

processChar(X,Oldvowels,New):-vowel(X),

New is Oldvowels+1.

processChar(X,Oldvowels,Oldvowels).

vowel(65). /* A */

vowel(69). /* E */

vowel(73). /* I */

vowel(79). /* O */

vowel(85). /* U */

vowel(97). /* a */

vowel(101). /* e */

vowel(105). /* i */

Input and Output 77

vowel(111). /* o */

vowel(117). /* u */

?- go(Vowels).

: In the beginning was the word*

Vowels = 8

?- go(Vowels).

: pqrst*

Vowels = 0


5,7 Masukan dan Keluaran menggunakan File

Prolog mengambil semua input dari input stream dan menulis semua output ke

output stream. Secara default kedua stream ini bernama user,

menunjukkan user terminal, yaitu untuk input keyboard dan layar untuk memperoleh output.

Fasilitas yang sama yang tersedia untuk input dan output dari dan ke user

terminal kedua istilah tersebut dengan istilah atau karakter demi karakter juga tersedia untuk input

dan output dari dan ke file (misalnya file pada hard disk atau CD-ROM).

User dapat membuka dan menutup streaminput dan output yang terkait dengan

jumlah nama file, tapi hanya ada satu streaminput dan satu

stream output pada setiap saat. Perhatikan bahwa tidak ada file bisa terbuka untuk input maupun

output pada waktu yang sama (kecuali user) dan bahwa user input dan output stream

tidak dapat ditutup.


5,8 Keluaran: Mengubah Current Output Stream

Stream output dapat diubah menggunakan tell / 1 predikat. Ini membutuhkan

argumen tunggal, yang merupakan atom atau variabel yang mewakili nama file, misalnya

kirim ( ‘outfile.txt’).

Mengevaluasi sebuah tujuan kirim menyebabkan file bernama untuk menjadi arus output

arus. Jika file belum terbuka, file dengan nama tertentu pertama kali diciptakan

(semua file yang sudah ada dengan nama yang sama akan dihapus).

Perhatikan bahwa file yang sesuai dengan stream output sebelumnya tetap

terbuka ketika arus output baru stream dipilih. Hanya stream output

dapat ditutup (menggunakan predikat kata yang dijelaskan di bawah).

Arus output default stream user, yaitu user terminal. Nilai ini dapat

dikembalikan baik dengan menggunakan kata predikat atau dengan kirim (user).

Built-in predikat tell/ 0 mengambil tanpa argumen. Mengevaluasi sebuah tujuan kepada penyebab

arus output file yang akan ditutup dan arus output stream untuk diatur ulang ke user,

i.e. user.

Built-in predikat tell / 1 memerlukan satu argumen, yang harus menjadi variabel

dan biasanya akan terikat. Mengevaluasi sebuah tujuan memberitahu menyebabkan variabel yang akan

terikat nama output stream.


File 5,9 Masukkan: Mengubah Input Current Stream

Input stream yang aktif dapat diubah dengan menggunakan see/ 1 predikat. Ini membutuhkan

argumen tunggal, yang merupakan atom atau variabel yang mewakili nama file, misalnya

see( ‘myfile.txt’).

Mengevaluasi sebuah tujuan see menyebabkan file bernama input yang menjadi stream.

Jika file ini belum terbuka itu pertama kali dibuka (untuk akses baca saja). Jika tidak

mungkin untuk membuka file dengan nama yang diberikan, kesalahan akan dihasilkan.

Catatan bahwa file yang sesuai dengan arus input yang sebelumnya tetap

terbuka ketika sebuah arus input yang baru dipilih. Hanya arus input

dapat ditutup. Default input stream user, yaitu user. Nilai ini dapat

dipulihkan baik dengan menggunakan dilihat predikat atau dengan see (user).

Built-in predikat see/ 1 memerlukan satu argumen, yang harus menjadi variabel

dan biasanya akan terikat. Mengevaluasi sebuah tujuan see menyebabkan variabel yang akan

terikat nama input stream.


5.9.1 Membaca dari File: End of File

Jika akhir file ditemukan ketika mengevaluasi tujuan read (X), variabel X akan

terikat ke atom end_of_file.

Jika akhir file ditemukan saat mengevaluasi tujuan get(X) atau get0 (X),

variabel X akan terikat kepada seorang ‘khusus’ nilai numerik. Sebagai nilai-nilai ASCII harus dalam

kisaran 0-255 inklusif, ini biasanya akan menjadi -1, tetapi dapat bervariasi dari satu

Prolog pelaksanaan lain.


5.9.2 Membaca dari File: End of Record

Tergantung pada versi Prolog digunakan, mungkin ada ketidakcocokan untuk

karakter input antara membaca akhir sebuah catatan dari terminal user dan dari sebuah file.

Biasanya akhir baris dari input pada terminal user akan ditunjukkan oleh

karakter dengan nilai ASCII 13. Akhir sebuah catatan dalam sebuah file umumnya akan

ditunjukkan oleh dua nilai ASCII: 13 diikuti oleh 10.

Program berikut menunjukkan bagaimana membaca dalam serangkaian karakter dari

keyboard dan mencetak mereka keluar, satu per baris.

Readline:-get0 (X), proses (X).

proses (13).

proses (X):-X = \ = 13, memakai (X), nl, Readline.

Perhatikan useran meletakkan daripada menulis dan bahwa tes untuk nilai ASCII 13

menghindari kebutuhan untuk karakter seperti * untuk menunjukkan ‘akhir input’.

? – Readline.

: Prolog test

Pr

ol

og

t

est

ya


5,10 Contoh Menggunakan File

Menetapkan predikat readterms membaca empat istilah yang pertama dari file tertentu dan

output mereka untuk file ditentukan lain, satu per baris.

Yang sesuai definisi yang diberikan di bawah ini.

readterms (infile, OUTFILE): –

see (infile), seen (OUTFILE),

read (T1), write (T1), nl, read (T2), write (T2), nl,

read (T3),write (T3), nl, read (T4), write (T4), nl,

seen, told.

Dengan asumsi isi file textfile.txt adalah tiga baris:

‘Istilah pertama’. ‘kedua kalinya’.

‘masa jabatan ketiga’.

‘keempat istilah’. ‘kelima istilah’.

menggunakan readterms memberikan output singkat berikut:

? – Readterms ( ‘textfile.txt’, ‘outfile.txt’).

ya

dan membuat sebuah file dengan empat baris teks

Istilah pertama

jabatan kedua

jabatan ketiga

istilah keempat

Meskipun definisi readterms di atas adalah benar sejauh it goes, akhir

Dua istilah (see dan tell) akan menyebabkan stream input dan output harus ditetapkan

user. Ini dapat menyebabkan masalah jika readterms digunakan sebagai subgoal yang lebih besar

program dimana input dan output streamtidak selalu baik user

ketika dipanggil.

Ini adalah praktek pemrograman yang baik untuk mengembalikan asli input dan output stream

sebagai langkah-langkah akhir ketika tujuan seperti readterms dievaluasi. Hal ini dapat dicapai

untuk input dengan menempatkan tujuan see (S) dan see (S) sebelum dan setelah istilah lainnya

dalam tubuh dari sebuah aturan. Mantan mengikat S untuk nama stream input;

yang terakhir me-reset input stream untuk S.

Dampak yang sama dapat dicapai untuk memperoleh output dengan menempatkan tujuan memberitahu (T) dan

kirim (T) sebelum dan sesudah istilah lain dalam tubuh sebuah aturan. Mantan mengikat T

nama output stream; yang terakhir arus output reset stream untuk

T.

Dengan menggunakan konvensi ini, yang telah direvisi readterms definisi adalah sebagai berikut:

readterms (infile, Output): –

see (S), lihat (infile), mengatakan (T), mengatakan (OUTFILE),

read (T1), write(T1), nl, read (T2), write (T2), nl,

read (T3), write (T3), nl, read (T4), write (T4), nl,

see, see (S), told, tell (T).

Senin, 23 November 2009

Expert systems for mortgages


An expert system for mortgages is a computer program that contains the knowledge and analytical skills of human experts, related to mortgage banking. Loan departments are interested in expert systems for mortgages because of the growing cost of labor which makes the handling and acceptance of relatively small loans less profitable. They also see in the application of expert systems a possibility for standardized, efficient handling of mortgage loans, and appreciate that for the acceptance of mortgages there are hard and fast rules which do not always exist with other types of loans.
Since most interest rates for mortgages are controlled by the goverment, intense competition sees to it that a great deal in terms of business depends on the quality of service offered to clients - who shop around for the loan best suiting their needs. Expert systems for mortgages considers the key factors which enter the profitability equation. For instance, “part and parcel of the quality of a mortgage loans portfolio to the bank is the time which elapses between the first contact with the customer and the bank's offering of a loan. Another key ingredient is the fact that home loans have significant features which are not always exploited through classical DP approaches. The expert system corrects this failure” [1].
The expert system also capitalizes on regulatory possibilities. In France, the government subsidizes one type of loan which is available only on low-cost properties (the HLM) and to lower income families. Known as "frets Conventionnes", these carry a rate of interest lower than the rate on the ordinary property loan from a bank. The difficulty is that granting them is subject to numerous regulations, concerning both:
the home which is to be purchased, and
the financial circumstances of the borrower.
To assure that all conditions have been met, every application has to be first processed at branch level and then sent to a central office for checking, before going back to the branch, often with requests for more information from the applicant. This leads to frustrating delays. Expert system for mortgages takes care of these by providing branch employees with tools permitting them to process an application correctly, even if a bank employee does not have an exact knowledge of the screening procedure.

Jumat, 13 November 2009

OPERATOR AND ARITHMETIC

Practical Exercise 4
(1) This program is based on Animals Program 3, given in Chapter 2.
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). large(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.

Convert the seven predicates used to operator form and test your revised program.
The output should be the same as the output from the program above. Include
directives to define the operators in your program.


(2) Define and test a predicate which takes two arguments, both numbers, and
calculates and outputs the following values: (a) their average, (b) the square root of
their product and (c) the larger of (a) and (b).

OPERATORS AND ARITHMATICS IN PROLOG

Operators and Arithmetics
Operators
Up to now, Prolog user usually use the notation for predicates by a number of arguments in parentheses.
Ex : likes(john,mary)
There is another alternative :
- Two arguments (a binary predicates) be converted to an infix operator
the functor be written between two arguments with no parentheses
Ex : john likes mary
- One argument (a unary predicate) be converted to :
1. Prefix operator  the functor be written before the argument with no parentheses
Ex : isa_dog fred
2. Postfix operator  the functor be written after the argument
Ex : fred isa_dog
Both of predicate (one or two arguments) can be converted to an operator by entering a goal using the op predicate at the system prompt. Ex :
?-op(150,xfy,likes).
This predicate takes three arguments :
1. 150 (operator precedence) : an integer from 0 upwards
So we can change it with another integer.
2. Xfy : the predicate is binary and is to be converted to an infix operator.
This argument should normally be one of the following three atoms:
1. Xfy
2. Fy : the predicate is unary and is to be converted to an prefix operator
3. Xf : the predicate is unary and is to be converted to a postfix operator
3. Likes : the name of the predicate that is to be converted to an operator.
Arithmetics
Prolog user can doing arithmetic calculate with prolog, such as :
1. Arithmetic operator
X+Y : sum of X and Y
X-Y : dfference of X and Y
X*Y : product of X and Y
X/Y : quotient of X and Y
X//Y : the ‘integer quotient’ of X and Y (the result is truncated to the nearest integerbetween it and zero)
X^Y : X to the power of Y
-X : negative of X
abs(X) : absolute value of X
sin(X) : sine of X
cos(X) : cosine of X
max(X,Y) : yhe larger of X and Y
sqrt(X) : square root of X
2. Operator presedence in arithmetic expression
Prolog use ordinary algebra algorithm in arithmetic operation.
Ex : A+B*C-D
In the algebra, C*B are calculate first, then the result+A, then the result of sum-D. it is same with those in prolog. But, if we want to calculate A+B, C-D, then multiply both of the result, we must add the parentheses.
Ex : (A+B)*(C-D)
3. Relasion operator
The operator like =,!=, >, >=, <, <= can be used in prolog

Degree operator
Under is the rist of equality operators that used in prolog with the function of each operator:
• Arithmetic Expression Equality ( =:= )
• Arithmetic Expression Inequality ( =\= )
• Terms Identical ( == )
• Terms Not Identical ( \== )
• Terms Identical With Unification ( = )
• Non-Unification Between Two Terms( \= )

Logic operator
a. Operator NOT
Operator not can be placed before predicate to give the negation. Predicate that be negation has the truth value if the origin predicate is false and has the false value if the origin predicate is truth.
The example of using operator not :
dog(fido).
?- not dog(fido).
no
?- dog(fred).
no
?- not dog(fred).
Yes
b. Disjunction operator
Disjunction operator is used as operator ‘atau’.
Ex :
?- 6<3;7 is 5+2.
yes
?- 6*6=:=36;10=8+3.
yes

Rabu, 21 Oktober 2009

Fact, Rules, Predicate, and Variable in Prolog

1. Buka Notepad

2. Tulis database animal di notepad.


3. Simpan dengan format (nama.pl)


4. Buka prolog

5. Pilih file-consult-pilih file yang dituju

6. Tuliskan query(pertanyaan)

Contoh :

a) Sebutkan semua mamalia ! (gambar soal a)


b) Sebutkan semua binatang karnivora yang termasuk mamalia ! (gambar soal b)

c) Sebutkan semua mamalia yang belang (gambar soal c)


d) Apakah ada reptil yang memiliki bulu tengkuk? (gambar soal d)

Dan lihat hasilnya