Kamis, 10 Desember 2009

Summary Loop

6.1fixed number of times Loop
Banyak bahasa pemrograman menyediakan 'for loop' yang memungkinkan satu set instruksi
akan dieksekusi tetap beberapa kali. fasilitas tersebut tidak tersedia dalam Prolog
, tetapi efek yang sama dapat diperoleh dengan menggunakan rekursi, seperti ditunjukkan dalam
contoh program di bawah ini.

Contoh 1
Keluaran program berikut bilangan bulat dari nilai tertentu sampai 1.
loop(0).
loop(N):-N>0,write('The value is: '),write(N),nl,
M is N-1,loop(M).
Predikat loop didefinisikan dalam istilah itu sendiri. Kalimat kedua dapat
dianggap sebagai: 'untuk loop dari N, pertama menulis nilai N, kemudian kurangi satu untuk memberikan
M, lalu loop dari M '. Proses ini jelas harus dihentikan dan ini
dicapai oleh klausa pertama: 'ketika argumen adalah nol, melakukan apa-apa (dan karenanya
berhenti) '. Klausa pertama dapat dianggap sebagai suatu kondisi untuk menghentikan rekursi.

?- loop(6).
The value is: 6
The value is: 5
The value is: 4
The value is: 3
The value is: 2
The value is: 1
yes

Perhatikan penggunaan dua gol M adalah N-1, loop (M) dalam kalimat kedua untuk
loop predikat. Alternatif yang jelas loop (N-1) tidak akan bekerja. Prolog hanya
mengevaluasi pernyataan seperti N-1 ketika mengevaluasi tujuan dengan atau functor adalah salah satu dari
operator relasional, seperti dijelaskan dalam Bab 4. N-1 jika digunakan sebagai argumen
suatu predikat itu diartikan istilah dengan infiks operator - (yaitu tanda minus) dan
argumen N dan 1. Ini sangat tidak mungkin apa yang dimaksudkan!

Example 2
Program berikutnya keluaran bilangan bulat dari inclusive pertama hingga akhir.
/* output integers from First to Last inclusive */
output_values(Last,Last):- write(Last),nl,
write('end of example'),nl.
output_values(First,Last):-First=\=Last,write(First),
nl,N is First+1,output_values(N,Last).
Disini output_values memiliki 2 argumen yang bisa dibaca sebagai output integer dari inklusif pertama hingga terakhir. Loop berakhir ketika kedua argumen
sama.
?- output_values(5,12).
56789
10
11
12
end of example
yes

6.2 Loop sampai kondisi terpenuhi
Banyak bahasa memiliki sebuah 'for loop' yang memungkinkan sebuah set instruksi yang akan
dieksekusi berulang kali sampai kondisi tertentu terpenuhi. Sekali lagi, tidak ada fasilitas seperti
tersedia secara langsung di Prolog, tetapi efek yang sama dapat diperoleh dengan beberapa cara.

6.2.1 Rekursi
Contoh pertama di bawah ini menunjukkan penggunaan istilah rekursi untuk membaca dimasukkan oleh
pengguna dari keyboard dan output mereka ke layar, sampai selesai.

6.2.2 menggunakan predikat 'repeat'
Meskipun sering dapat digunakan untuk efek yang besar, rekursi tidak selalu yang paling mudah
cara untuk menyediakan jenis perulangan yang diperlukan dalam program Prolog. Metode lain
yang sering digunakan adalah berdasarkan pada built-in predikat ulangi.
Nama predikat ini benar-benar sebuah ironi. Tujuan tidak mengulangi
mengulangi apa pun; itu hanya berhasil setiap kali disebut. Nilai besar mengulang
adalah bahwa hal itu juga berhasil (sebanyak yang diperlukan) pada kemunduran. Efek
ini, seperti untuk tujuan lainnya berhasil, adalah untuk mengubah urutan mengevaluasi tujuan
dari "kanan ke kiri '(yaitu backtracking) kembali ke' kiri-ke-kanan '. Ini dapat digunakan untuk
menciptakan efek perulangan, seperti ditunjukkan pada contoh di bawah ini.
Program ini berulang kali mendorong pengguna untuk memasukkan istilah sampai entah ya atau tidak
dimasukkan. Ini adalah alternatif dari program rekursif ditampilkan di bagian akhir
bagian sebelumnya. Dalam hal ini masih diperdebatkan apakah menggunakan mengulang adalah
perbaikan menggunakan rekursi, tetapi contoh adalah termasuk untuk tujuan
ilustrasi.

6.3 menelusuri kegagalan
Seperti namanya, predikat gagal selalu gagal, apakah pada 'standar'
evaluasi kiri-ke-kanan atau pada kemunduran. Keuntungan dapat diambil dari ini,
dikombinasikan dengan otomatis Prolog backtracking, untuk pencarian melalui database untuk
menemukan semua klausa dengan properti tertentu.

6.3.1 mencari database prolog
Misalkan database berisi klausa seperti
anjing (fido).
anjing (fred).
anjing (jonathan).
Setiap anjing klausul dapat diproses pada gilirannya menggunakan predikat alldogs didefinisikan
di bawah.
alldogs:-anjing (X), write (X), menulis ( 'adalah anjing'), nl, gagal.
alldogs.
Memanggil alldogs akan menyebabkan anjing (X) untuk dicocokkan dengan anjing ayat-ayat dalam
database. Awalnya X akan terikat untuk fido dan "fido adalah anjing 'akan output. Itu
tujuan akhir klausa pertama dari predikat alldogs kemudian akan menyebabkan evaluasi untuk
gagal. Prolog akan mundur atas nl dan dua tujuan menulis (semua yang
unresatisfiable) hingga mencapai anjing (X). Tujuan ini akan berhasil untuk kedua kalinya
menyebabkan X untuk terikat untuk fred.
Proses ini akan berlanjut sampai fido, fred dan jonathan semua telah keluaran,
ketika evaluasi akan kembali gagal. Kali ini panggilan untuk anjing (X) juga akan gagal karena ada
Tidak ada anjing lebih lanjut pasal-pasal dalam database. Hal ini akan menyebabkan klausul pertama untuk
alldogs gagal dan Prolog untuk memeriksa klausul kedua alldogs. Ini
berhasil dan evaluasi akan berhenti.
Efeknya adalah untuk loop melalui database menemukan semua kemungkinan nilai dari X yang
memenuhi tujuan anjing (X).
? - Alldogs.
fido adalah anjing
fred adalah anjing
jonathan adalah anjing
ya
Catatan pentingnya klausa kedua dari alldogs predikat. Hal ini ada untuk
memastikan bahwa, setelah database telah digeledah, tujuan berhasil. Dengan hanya
baris pertama, setiap panggilan ke alldogs akhirnya akan gagal.
alldogs:-anjing (X), write (X), menulis ( 'adalah anjing'), nl, gagal.
? - Alldogs.
fido adalah anjing
fred adalah anjing
jonathan adalah anjing
tidak
Program berikutnya dirancang untuk mencari database yang berisi klausa
mewakili nama, umur, tempat tinggal dan pekerjaan sejumlah
orang-orang.
Jika database berisi lima klausa
orang (john, smith, 45, london, dokter).
orang (martin, williams, 33, Birmingham, guru).
orang (henry, smith, 26, manchester, tukang ledeng).
orang (jane, Wilson, 62, london, guru).
orang (mary, smith, 29, glasgow, surveyor).
Nama semua guru dapat ditemukan dengan menggunakan allteachers predikat.
allteachers:-orang (Forename, Surname ,_,_, guru),
write (Forename), menulis ( ''), menulis (Marga), nl,
gagal.
allteachers.
Efek menggunakan backtracking dengan kegagalan dalam kasus ini adalah untuk menemukan semua
guru dalam database.
? - Allteachers.
martin williams
jane wilson
ya
Jika kedua klausul allteachers dihilangkan, baik guru masih akan
ditemukan tetapi evaluasi allteachers akan berakhir dengan kegagalan. Ini adalah yang sedikit atau
tidak penting ketika tujuan yang dimasukkan pada sistem prompt, tetapi jika allteachers itu
digunakan sebagai tujuan dalam tubuh aturan itu jelas akan mudah untuk dilaksanakan untuk memastikan bahwa
selalu berhasil.
Perlu dicatat bahwa tidak selalu perlu untuk menggunakan 'backtracking dengan
kegagalan 'untuk mencari database. Sebagai contoh, predikat somepeople / 0 didefinisikan
di bawah ini akan menemukan semua orang dalam database yang diberikan sebelumnya, turun ke williams,
standar hanya menggunakan backtracking.
somepeople:-orang (Forename, Marga ,_,_,_),
write (Forename), menulis ( ''), menulis (Marga), nl,
Nama keluarga = williams.
somepeople.
Tujuan Nama Keluarga = williams berhasil jika variabel terikat Nama Keluarga
williams. Jika tidak, itu gagal. Efeknya adalah untuk mencari basis data hingga dan termasuk
orang klausul dengan argumen kedua williams.
? - Somepeople.
John Smith
martin williams
ya

6.3.2 Mencari Solusi berlebih
menelusuri kegagalan juga dapat digunakan untuk mencari semua cara untuk memuaskan tujuan.
Misalkan sebuah predikat findroute (Town1, Town2, Route) menemukan sebuah rute Route
antara dua kota Town1 dan Town2. Rincian predikat ini tidak relevan
di sini. Ini dapat diasumsikan bahwa Town1 dan Town2 adalah atom dan bahwa rute ini adalah daftar.
menelusuri kegagalan kemudian dapat digunakan untuk mencari semua kemungkinan rute antara
Town1 dan Town2 dan menulis masing-masing satu di baris terpisah, sebagai berikut:
find_all_routes (Town1, Town2): --
findroute (Town1, Town2, Route),
write ( 'Kemungkinan rute:'), menulis (Route), nl, gagal.
find_all_routes (_,_).

Summary input output

built-in predikat yang membaca dan menulis dengan baik untuk pengguna
terminal (keyboard dan layar) atau file, kedua istilah tersebut dengan istilah dan character-
karakter dalam program Anda sendiri. Nilai ASCII karakter untuk memanipulasi string. Prolog memiliki fasilitas untuk mengaktifkan input maupun output dari istilah atau karakter. Menggunakan istilah sederhana dan akan dijelaskan terlebih dahulu. Awalnya, akan diasumsikan bahwa
semua output ke layar pengguna dan semua masukan pengguna adalah keyboard. Input dan output menggunakan file eksternal.

Persyaratan 1:Outputting

predikat mengambil satu argumen, yang harus valid dalam prolog. Evaluasi penyebab istilah predikat harus ditulis menuju output, yang secara default adalah layar pengguna. (Yang dimaksud dengan arus keluaran Logika Pemrograman Prolog Dengan streaming)
Contoh
?- write(26),nl.
26
yes
?- write('a string of characters'),nl.
a string of characters
yes
?- write([a,b,c,d,[x,y,z]]),nl.
[a,b,c,d,[x,y,z]]
yes
?- write(mypred(a,b,c)),nl.
mypred(a,b,c)
yes
?- write('Example of use of nl'),nl,nl,write('end of example'),nl.
Example of use of nl
end of example
yes

Persyaratan 2:Inputting


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, yang secara default adalah pengguna keyboard. (Yang dimaksud dengan arus input Saat ini hanya dapat diartikan keyboard pengguna.)
Dalam input stream, istilah harus diikuti oleh sebuah titik ('.') dan setidaknya karakter ruang kosong, seperti spasi atau baris baru. Titik dan spasi karakter dibaca dalam tetapi tidak dianggap bagian dari istilah. Ketika sebuah tujuan membaca dievaluasi, istilah input disatukan dengan argumen
variabel. Jika variabel tidak terikat (yang biasanya terjadi) itu adalah terikat pada masukan nilai.

Menggunakan 3:Input dan Output Karakter

Meskipun input dan output dari syarat-syarat sangat mudah, penggunaan tanda kutip dan penuh dapat berhenti rumit dan tidak selalu sesuai. Sebagai contoh, akan membosankan untuk mendefinisikan sebuah predikat (menggunakan baca) yang akan membaca serangkaian karakter dari keyboard dan menghitung jumlah huruf vokal. Pendekatan yang lebih baik untuk masalah seperti ini adalah untuk masukan 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 spasi dan tab) memiliki sesuai ASCII (American Standard Kode untuk Informasi Interchange) nilai, yang merupakan integer 0-255.
Tabel di bawah ini memberikan nilai ASCII numerik yang sesuai dengan karakter dicetak utama dan beberapa orang lain.

4. Keluaran Karakter

Karakter adalah output dengan menggunakan built-in predikat put / 1. Predikat mengambil satu argumen, yang harus menjadi nomor 0-255 atau ekspresi yang mengevaluasi ke integer dalam jangkauan.
Mengevaluasi tujuan put menyebabkan satu karakter untuk output ke output arus sungai.
Ini adalah karakter yang sesuai dengan nilai numerik (ASCIIvalue) dari argumen.

5. Memasukkan Karakter

Dua predikat built-in disediakan untuk memasukkan satu karakter: get0 / 1 dan mendapatkan / 1.
Get0 predikat yang mengambil satu argumen, yang harus menjadi variabel. Mengevaluasi sebuah tujuan get0 menyebabkan karakter untuk dibaca dari input saat ini sungai. Variabel tersebut kemudian disatukan dengan nilai ASCII karakter ini.

6. Menggunakan Karakter: Contoh-contoh

Contoh pertama menunjukkan cara membaca dalam serangkaian karakter dari keyboard finishing dengan * dan untuk output nilai-nilai ASCII yang berhubungan satu per baris (untuk semua karakter termasuk *).
Readin predikat didefinisikan secara rekursif. Ini menyebabkan satu karakter untuk menjadi input dan variabel X untuk terikat kepada para (numerik) nilai ASCII. Tindakan yang dilakukan (proses (X) tujuan) tergantung pada apakah atau tidak X memiliki nilai yang berarti a * 42 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)
Mengasumsikan argumen variabel tak terikat (yang biasanya akan terjadi), itu terikat pada nilai ASCII karakter input.

7. Input dan Output Menggunakan File

Prolog mengambil semua input dari input arus sungai dan menulis semua output ke output arus sungai. Secara default kedua sungai ini bernama pengguna, yang melambangkan pengguna terminal, yaitu untuk input keyboard dan layar untuk memperoleh keluaran.
Fasilitas yang sama tersedia untuk input dan output dari dan ke terminal baik pengguna 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).
Pengguna dapat membuka dan menutup aliran input dan output yang berhubungan dengan sejumlah nama file, tapi hanya ada satu aliran input dan satu output arus sungai setiap saat. Perhatikan bahwa tidak ada file bisa terbuka untuk input maupun output pada waktu yang sama (kecuali pengguna) dan bahwa pengguna input dan output stream
tidak dapat ditutup.

8. File Output: Mengubah Current Output Stream


Aliran arus keluaran dapat diubah menggunakan tell / 1 predikat. Hal ini memerlukan satu argumen, yang merupakan atom atau variabel yang mewakili nama file, misalnya kirim ( 'outfile.txt').
Mengevaluasi sebuah tujuan kirim menyebabkan file bernama untuk menjadi outputStream saat ini.
Jika file belum terbuka, file dengan nama tertentu adalah pertama kali diciptakan (file yang telah ada dengan nama yang sama akan dihapus).
Perhatikan bahwa file yang terkait dengan aliran arus keluaran sebelumnya tetap terbuka ketika arus keluaran baru stream dipilih. Hanya aliran arus keluaran dapat ditutup (menggunakan predikat kata yang dijelaskan di bawah).
Arus keluaran default stream pengguna, yaitu pengguna terminal. Nilai ini dapat dikembalikan baik dengan menggunakan kata predikat atau dengan kirim (pengguna).
Built-in predikat tell/ 0 mengambil tanpa argumen. Mengevaluasi sebuah tujuan kepada arus keluaran menyebabkan file yang akan ditutup dan arus keluaran sungai untuk diatur ulang ke pengguna, yaitu pengguna terminal.
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 keluaran arus sungai.

9. File Input: Mengubah Input Current Stream

Input stream yang aktif dapat diubah dengan menggunakan view / 1 predikat. Hal ini memerlukan satu argumen, yang merupakan atom atau variabel yang mewakili nama file, misalnya lihat ( 'myfile.txt').
Mengevaluasi sebuah tujuan melihat menyebabkan file bernama input yang menjadi sungai. 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.
Perhatikan bahwa file yang terkait dengan arus input yang sebelumnya tetap terbuka ketika sebuah arus input yang baru dipilih. Hanya aliran input yang dapat ditutup (menggunakan predikat melihat dijelaskan di bawah).
Default input stream pengguna, yaitu pengguna terminal. Nilai ini dapat dikembalikan baik dengan menggunakan dilihat predikat atau dengan melihat (pengguna).
Built-in predikat view / 0 mengambil tanpa argumen. Mengevaluasi sebuah tujuan melihat input yang menyebabkan file yang akan ditutup dan arus input yang akan diatur ulang ke pengguna, yaitu pengguna terminal.
Built-in predikat view / 1 memerlukan satu argumen, yang harus menjadi variabel dan biasanya akan terikat. Mengevaluasi sebuah tujuan melihat menyebabkan variabel untuk terikat dengan nama input arus sungai.

10.Reading dari File: End of File


Jika akhir file ditemukan ketika mengevaluasi tujuan read (X), variabel X akan terikat pada atom end_of_file.
Jika akhir file ditemukan saat mengevaluasi tujuan mendapatkan (X) atau get0 (X), variabel X akan terikat kepada seorang 'khusus' nilai numerik. Sebagai nilai-nilai ASCII harus berada dalam kisaran 0-255 inklusif, ini biasanya akan menjadi -1, tetapi dapat bervariasi dari satu pelaksanaan Prolog yang lain.

11.Reading dari File: End of Record

Tergantung pada versi Prolog digunakan, mungkin ada ketidakcocokan untuk
karakter input antara membaca akhir sebuah catatan (yaitu karakter (s) yang
menandai akhir baris) dari terminal pengguna dan dari sebuah file.
Biasanya akhir baris dari input pada terminal pengguna 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.

Summary Operator dan Arithmetic

1.Operator
Setiap predikat yang ditetapkan pengguna dengan dua argumen (predikat biner) dapat dikonversi ke operator infiks.
Setiap predikat yang ditetapkan pengguna dengan satu argumen (a unary predikat) dapat diubah menjadi prefiks operator. Hal ini memungkinkan functor ditulis sebelum argumen tanpa tanda kurung.
unary predikat yang dapat dikonversi ke postfix operator. Hal ini memungkinkan functor ditulis setelah argumen
Setiap predikat yang ditetapkan pengguna dengan satu atau dua argumen dapat dikonversi ke operator dengan memasukkan tujuan menggunakan op predikat pada sistem prompt. Predikat ini butuh tiga argumen, misalnya

?-op(150,xfy,likes).

1. Argumen pertama (150) adalah 'operator didahulukan'. Nilai didahulukan operator
digunakan untuk menentukan urutan dari operator akan diterapkan bila lebih dari satu
digunakan dalam istilah. Dalam kebanyakan kasus-kasus lain itu akan cukup untuk menggunakan nilai yang sewenang-wenang seperti 150.

2. Argumen kedua biasanya harus salah satu dari tiga atom berikut:
xfy berarti bahwa predikat biner dan akan dikonversikan ke operator infiks
fy berarti bahwa predikat adalah unary dan akan dikonversikan ke operator prefix
xf berarti bahwa predikat adalah unary dan akan dikonversi ke postfix operator

3. Argumen ketiga menentukan nama predikat yang harus dikonversi ke
operator.

2.Arithmetic
Prolog menyediakan fasilitas untuk melakukan aritmatika menggunakan notasi yang serupa dengan yang sudah akrab bagi banyak pengguna dari aljabar dasar.
Ada beberapa operator aritmatika dan fungsi aritmatika tersedia dalam Prolog:
1.x + Y jumlah X dan Y
2.x-Y perbedaan dari X dan Y
3.x * Y produk X dan Y
4.x / Y hasil bagi X dan Y
5.x / / Y 'integer hasil bagi' dari X dan Y (hasilnya adalah dipotong ke integer terdekat antara bilangan itu dan nol)
6.x ^ Y X untuk kekuatan Y
7.-X negatif X
8.abs (X) nilai absolut X
9.sin (X) sinus X (untuk X diukur dalam derajat)
10.cos (X) kosinus X (untuk X diukur dalam derajat)
11.max (X, Y) yang lebih besar dari X dan Y
12.sqrt (X) akar kuadrat X

adalah predikat biasanya digunakan dalam cara yang dijelaskan di sini, argumen pertama juga dapat berupa angka atau variabel terikat dengan nilai numerik. Dalam kasus ini, nilai-nilai numerik dari dua argumen dihitung. Tujuan berhasil jika ini adalah sama. Jika tidak, itu gagal.

1. Argumen pertama adalah variabel terikat, ia terikat dengan nilai argumen kedua (sebagai efek samping).
2. Argumen pertama adalah angka, atau variabel terikat dengan nilai numerik.
3. Argumen pertama adalah sebuah atom, sebuah istilah majemuk, daftar, atau variabel terikat satu ini (tidak ada yang seharusnya terjadi), hasilnya adalah tergantung pada implementasi.
Kemungkinan besar akan terjadi kesalahan.


Operator Precedence di Arithmetic Expressions
Operator didahulukan relatif tinggi seperti * dan / diterapkan sebelum mereka yang didahulukan lebih rendah seperti + dan -. Efeknya adalah untuk memberikan ekspresi seperti A + B * CD arti bahwa seorang pengguna yang akrab dengan aljabar akan mengharapkan untuk memiliki, yaitu A + (B * C)-D atau (A + B) * (CD).

Relational Operator
>= < =<>" onmouseover="this.style.backgroundColor='#ebeff9'" onmouseout="this.style.backgroundColor='#fff'">The infiks operator =: = = \ =>> = <= <>

3.Kesetaraan Operator
Ada tiga jenis operator relasional untuk pengujian kesetaraan dan ketidaksetaraan tersedia dalam Prolog. Tipe pertama digunakan untuk membandingkan nilai-nilai ekspresi aritmatika. Dua lainnya jenis tersebut digunakan untuk membandingkan istilah.

a. Aritmatika Expression Kesetaraan =: =
E1 =: = E2 berhasil jika ekspresi aritmetika E1 dan E2 mengevaluasi nilai yang sama.
b. Ekspresi aritmatika Ketidaksetaraan = \ =
E1 = \ = E2 berhasil jika ekspresi aritmetika E1 dan E2 tidak mengevaluasi nilai yang sama.
c. Persyaratan Identik ==
Kedua argumen dari operator == infiks harus istilah. Tujuan Term1 == Term2 berhasil jika dan hanya jika Term1 identik dengan Term2. Setiap variabel yang digunakan dalam istilah mungkin atau mungkin tidak sudah terikat, tetapi tidak ada variabel terikat sebagai akibat dari tujuan evaluasi.
d. Persyaratan Tidak Identik \ ==
Term1 \ == Term2 tes apakah Term1 tidak identik dengan Term2. Tujuan berhasil jika Term1 == Term2 gagal. Selain itu gagal.
e. Syarat Identik Dengan Unifikasi =
Istilah kesetaraan operator = adalah serupa dengan == dengan satu penting (dan sering sangat berguna) perbedaan. Tujuan Term1 = Term2 berhasil jika Term2 istilah Term1 dan menyatukan, yaitu
ada beberapa cara untuk mengikat nilai-nilai variabel yang akan membuat istilah identik. Jika tujuan berhasil, seperti terjadi sebenarnya mengikat.
f. Non-Unifikasi Antara Dua Syarat \ =
Tujuan Term1 \ = Term2 berhasil jika Term1 = Term2 gagal, yaitu dua istilah ini tidak dapat bersatu. Selain itu gagal.

4.Operator Logika
Bagian ini memberikan gambaran singkat dari dua operator yang mengambil argumen yang menyebut istilah, yaitu istilah yang dapat dianggap sebagai tujuan.
a. Operator "not"
Operator awalan "not" / 1 dapat ditempatkan sebelum tujuan untuk memberikan yang pengingkaran. Tujuan yang menegasikan berhasil jika tujuan asli gagal dan gagal jika tujuan asli berhasil. Contoh berikut menggambarkan penggunaan "not" / 1. Diasumsikan bahwa database berisi satu klausul

b. Operator disjungsi
operator disjungsi; / 2 (ditulis sebagai karakter titik koma) digunakan untuk mewakili 'atau'. Ini adalah infiks operator yang membutuhkan dua argumen, yang keduanya adalah tujuan. Tujuan1; Tujuan2 berhasil jika salah satu dari Tujuan1 atau Tujuan2 berhasil.


Fact, Rules, Predicate, and Variable in Prolog

disini kami akan menjelaskan tentang fakta, aturan, predikat dan variabel di dalam prolog.
untuk itu, yang pertama kita buat adalah menulis file seperti ini di notepad.
setelah itu simpan dengan nama pl1.pl dan pl2.pl


untuk soal pertama, consult pl1.pl

ketikkan seperti yang ada di gambar tiap nomornya, lalu enter.
untuk melanjutkan hasilnya tekan titik koma(;).

untuk soal ke2, tambahkan fakta seperti dibawah ini
lalu Consult file pl2.pl.

Setelah itu tuliskan couple(X,Y).
lihat hasilnya seperti di bawah.
untuk melanjutkan menampilkan hasil, tekan titik koma(;)



Rabu, 09 Desember 2009

LOOP! V.03

Pertama buatlah source code seperti ini:


consult dan ketik "semuasiswa". maka akan muncul:


lalu coba ganti seperti di bawah ini :


ulangi mengetik "semuasiswa"

Senin, 07 Desember 2009

LOOP! V.02

seperti biasa masukkan rules seperti berikut:


lalu kita consult dan ketikkan go.
dan masukkan kata apapun seperti di bawah ini.



namun dengan cara lain kita bisa melakukan loop seperti di atas.



lalu masukkan command "loop." dan lakukan seperti di atas.

LOOP! V.01

pertama buatlah rules seperti ini.



Setelah itu kembali ke prolog dan consult file tsb.



setelah muncul hasi seperti di atas, dapat diambil kesimpulan bahwa sebenarnya prolog tidak memiliki fasilitas untuk looping, namun dengan menggunakan rules di atas, maka setelah prolog mencetak N, dan mengurangi nilainya lalu akan mencetak kembali N-1, dan seterusnya hingga nilai N adalah 0.