download disini ..
Archive for the ‘tutoriaL’ Category
14 Dec
Visit Indonesia (Expert System)
Visit Indonesia
Semakin padatnya rutinitas manusia, semakin tinggi tingkat stres yang dialami. Banyak orang-orang yang memanfaatkan objek-objek wisata sebagai sarana refreshing dan untuk melepaskan penat setelah setiap hari bekerja. Dengan expert system ini kami menawarkan beberapa pilihan tempat wisata yang bisa menjadi rujukan saat liburan. Disini kami tidak hanya menunjukkan lokasinya saja, namun juga tentang penilaian masyarakat terhadap objek wisata tersebut, Diharapkan dengan adanya ini, orang-orang tidak salah dalam memilih tempat wisata, sehingga mereka dapat melepaskan stres mereka tanpa rasa kecewa.
1. Ketikkan seperti pada notepad dibawah ini kemudian save dengan ekstensi “.pl”
2. Kemudian setelah itu compile file-file tersebut dan untuk menjalankannya ketik “find.”
Dan hasilnya akan seperti ini:
Dengan demikian, maka masyarakat dapat mengetahui tempat-tempat wisata di Indonesia dan kondisinya.
7 Dec
LOOPS in Prolog
QUESTION 1
Pertama, deklarasikan isi notepad di bawah. Lalu simpan dengan ekstensi ‘.pl’
Lalu, consultkan file ke PROLOG. Setelah itu, ketik ?- outsquare(3,13). dan enter, hasilnya bisa dilihat dibawah.
QUESTION 2
Pertama, deklarasikan isi notepad di bawah. Lalu simpan dengan ekstensi ‘.pl’
Lalu, consultkan file ke PROLOG. Setelah itu, ketik ?- go. dan enter, lalu ketik terserah anda, saya di sini mengetik “hey” dan hasilnya bisa dilihat dibawah.
QUESTION 3
Pertama, deklarasikan isi notepad di bawah. Lalu simpan dengan ekstensi ‘.pl’
Lalu, consultkan file ke PROLOG. Setelah itu, ketik ?- find. dan enter dan hasilnya bisa dilihat di bawah.
7 Dec
Resume Chapter 6 (LOOPS)
Prolog tidak memiliki fasilitas perulangan, efek yang sama dapat diperoleh yang memungkinkan sesorang urutan tujuan untuk dievaluasi berulang kali. Hal ini dapat dilakukan dalam berbagai
cara, menggunakan backtracking, rekursi, built-in predikat, atau kombinasi dari semuanya.
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, seperti ditunjukkan dalam
contoh program di bawah ini.
Contoh 1
Keluaran program berikut bilangan bulat dari nilai tertentu ke 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: ‘loop dari N, pertama menulis nilai N, kemudian kurangi satu untuk memberikan
M, kemudian 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!
Contoh 2
Program berikutnya keluaran bilangan bulat dari First to Last inklusif.
/* 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).
output_values memiliki dua argumen, yang dapat dibaca sebagai ‘output
bilangan bulat dari First to Last inklusif ‘. Loop berakhir ketika kedua argumen
sama.
?- output_values(5,12).
56789
10
11
12
end of example
yes
Contoh 3
/* sum the integers from 1 to N (the first argument)
inclusive */
sumto(1,1).
sumto(N,S):-N>1,N1 is N-1,sumto(N1,S1),S is S1+N.
?- sumto(100,N).
N = 5050
?- sumto(1,1).
Yes
Perhatikan bahwa menggunakan N1 variabel tambahan untuk menyimpan nilai N-1 adalah
penting. Menulis sumto (N-1, S1), dll bukannya tidak akan bekerja dengan benar. N-1 adalah
istilah, bukan nilai numerik.
Contoh 4
Tentukan sebuah predikat untuk keluaran kuadrat N pertama bilangan bulat, satu per baris.
Ini dapat diprogram paling mudah jika perombakan pertama dalam bentuk rekursif
/* output the first N squares, one per line */
writesquares(1):-write(1),nl.
writesquares(N):-N>1,N1 is N-1,writesquares(N1),
Nsq is N*N,write(Nsq),nl.
?- writesquares(6).
149
16
25
36
yes
6.2 Looping Until a Condition Is Satisfied
Banyak bahasa memiliki ‘setelah 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 Recursion
Contoh pertama di bawah ini menunjukkan penggunaan istilah rekursi untuk membaca
dimasukkan oleh
pengguna dari keyboard dan output mereka ke layar, sampai akhir.
go:-loop(start). /* start is a dummy value used to get
the looping process started.*/
loop(end).
loop(X):-X\=end,write(‘Type end to end’),read(Word),
write(‘Input was ‘),write(Word),nl,loop(Word).
?- go.
Type end to end: university.
Input was university
Type end to end: of.
Input was of
Type end to end: portsmouth.
Input was portsmouth
Type end to end: end.
Input was end
yes
Program rekursif ini berulang kali mendorong pengguna untuk memasukkan istilah sampai baik
ya atau tidak dimasukkan.
get_answer(Ans):-write(‘Enter answer to question’),
nl,get_answer2(Ans).
get_answer2(Ans):-
write(‘answer yes or no’),
read(A),
((valid(A),Ans=A,write(‘Answer is ‘),
write(A),nl);get_answer2(Ans)).
valid(yes). valid(no).
?- get_answer(Myanswer).
Enter answer to question
answer yes or no: maybe.
answer yes or no: possibly.
answer yes or no: yes.
Answer is yes
Myanswer = yes
6.2.2 Using the ‘repeat’ Predicate
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.
get_answer(Ans):-
write(‘Enter answer to question’),nl,
repeat,write(‘answer yes or no’),read(Ans),
valid(Ans),write(‘Answer is ‘),write(Ans),nl.
valid(yes). valid(no).
?- get_answer(X).
Enter answer to question
answer yes or no: unsure.
answer yes or no: possibly.
answer yes or no: no.
answer is no
X = no
Tujuan ke kiri repeat dalam tubuh klausa tidak akan pernah tercapai di backtracking.
Program berikutnya membaca urutan istilah dari file tertentu dan output
mereka ke sungai keluaran sekarang sampai akhir istilah dijumpai.
readterms(Infile):-
seeing(S),see(Infile),
repeat,read(X),write(X),nl,X=end,
seen,see(user).
Program ini menunjukkan bagaimana untuk mengimplementasikan suatu struktur menu yang loop kembali berulang kali untuk meminta lebih banyak masukan. Memasuki pergi pada prompt menyebabkan Prolog untuk output
menu dari mana pengguna dapat memilih satu kegiatan pada satu waktu sampai opsi d adalah
dipilih. Perhatikan bahwa semua input adalah istilah-istilah dan harus diikuti oleh sebuah titik
karakter.
go:- write(‘This shows how a repeated menu works’),
menu.
menu:-nl,write(‘MENU’),nl,
write(‘a. Activity A’),nl,write(‘b. Activity B’),nl,
write(‘c. Activity C’),nl,write(‘d. End’),nl,
read(Choice),nl,choice(Choice).
choice(a):-write(‘Activity A chosen’),menu.
choice(b):-write(‘Activity B chosen’),menu.
choice(c):-write(‘Activity C chosen’),menu.
choice(d):-write(‘Goodbye!’),nl.
choice(_):-write(‘Please try again!’),menu.
?- go.
This shows how a repeated menu works
MENU
a. Activity A
b. Activity B
c. Activity C
d. End
: b.
Activity B chosen
MENU
a. Activity A
b. Activity B
c. Activity C
d. End
: xxx.
Please try again!
MENU
a. Activity A
b. Activity B
c. Activity C
d. End
: d.
Goodbye!
Yes
6.3 Backtracking with Failure
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 Searching the Prolog Database
Misalkan database berisi klausa seperti
dog(fido).
dog(fred).
dog(jonathan).
Setiap dog klausul dapat diproses pada gilirannya menggunakan predikat alldogs didefinisikan
di bawah.
alldogs:-dog(X),write(X),write(‘ is a dog’),nl,fail.
Alldogs.
?- alldogs.
fido is a dog
fred is a dog
jonathan is a dog
yes
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:-dog(X),write(X),write(‘ is a dog’),nl,fail.
?- alldogs.
fido is a dog
fred is a dog
jonathan is a dog
no
Program berikutnya dirancang untuk mencari database yang berisi klausa
mewakili nama, umur, tempat tinggal dan pekerjaan sejumlah
orang-orang.
Jika database berisi lima klausa
person(john,smith,45,london,doctor).
person(martin,williams,33,birmingham,teacher).
person(henry,smith,26,manchester,plumber).
person(jane,wilson,62,london,teacher).
person(mary,smith,29,glasgow,surveyor).
Nama semua guru dapat ditemukan dengan menggunakan allteachers predikat.
allteachers:-person(Forename,Surname,_,_,teacher),
write(Forename),write(‘ ‘),write(Surname),nl,
fail.
Allteachers.
Efek menggunakan backtracking dengan kegagalan dalam kasus ini adalah untuk menemukan semua
guru dalam database
?- allteachers.
martin williams
jane wilson
yes
Jika kedua klausa 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:-person(Forename,Surname,_,_,_),
write(Forename),write(‘ ‘),write(Surname),nl,
Surname=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
yes
6.3.2 Finding Multiple Solutions
Backtracking dengan 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.
Backtracking dengan 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(‘Possible route: ‘),write(Route),nl,fail.
find_all_routes(_,_).
25 Nov
Input dan Output
BAB 5
5.1 OUTPUTTING
predikat built-in utama yang disediakan untuk istilah output write/ 1, yang d 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
Input dan Output
5.2 INPUT
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 OUTPUTTING KARAKTER
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 INPUT KARAKTER
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 MENGGUNAKAN KARKTER :CONTOH
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 Input and Output Using Files
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 Output: 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 Input: 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 Menggunakan File: Contoh
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).
25 Nov
Practical Exercise 5 (Input & Output)
Keterangan kode-kode dalam notepad:
- readline:-get0(P),process(P).
get: berguna untuk mengonvert karakter menjadi kode ASCII
process: berguna untuk memroses argumen yang dinyatakan.
- Kemudian ketik “case(P,Q):-P>64,P<91 is P+32” dan “case(P,Q):-Q is P+0.” Ini adalah kode-kode untuk menentukan kode bilangan ke huruf kecil.
- “process(P):-P=\=13,case(P,Q),put(Q),nl,readline.” Bagian ini untuk melakukan proses.
- Dan kode “nl” adalah perintah untuk ganti baris (berjajar secara vertikal).
Kemudian consult dalam program prolog.
- Hal ini berarti jika kita menginputkan tulisan “Nisyyah” maka akan dijabarkan vertikal ke bawah.
- Begitu juga jika mengetikkan kata “Sistem Informasi”. Tampilannya akan seperti ini.
Jadi, kata yang diinputkan akan menjabarkan secara vertikal.
2. Ketik seperti contoh dibawah ini kemudian save dengan nama “test1.txt”.
Ketik seperti ini juga namun save dengan nama “test1.pl”
Kemudian jalankan pada program prolog. Dengan mengetikkan seperti ini.
Setelah dijalankan dan keluar yes, maka secara otomatis akan terbentuk output file yang berbentuk (‘.txt’)
3. Ketikkan seperti di bawah ini.
Kemudian ketik seperti diatas namun dalam file ‘.pl’.
Kemudian buka program prolog. Dan ketikkan seperti dibawah ini
4. Ketik dalam notepad seperti ini.
Kemudian ketik seperti ini namun dalam format (.pl).
Dan jalankan dalam program prolog.
Dan output akan tersimpan otomatis dalam format ‘.txt’
5. Ketikkan seperti ini dalam file (.txt)
Kemudian ketikkan lagi seperti ini juga dalam format (‘.txt).
13 Nov
OPERATORS AND ARITMETICS (Summary of Chapter 4)
4. Operator dan Aritmatika.
4.1. Operator
Sering ditemui kesulitan untuk membaca penulisan standar prolog. Oleh karena itu, ada cara lain untuk menuliskan predikat.Seperti pada binary predicate, yang dapat diubah menjadi infix operator.
Contoh penulisan standar ada pada,
likes(oppy,yellow).
Selain itu bisa juga ditulis menurut binary predicate ,
oppy likes yellow.
Untuk predikate yang hanya mempunyai satu argumen atau yang disebut unary predicate dapat diubah menjadi postfix operator. Predikat dapat dituliskan sebelum argumen tanpa tanda kurung.
notasi operator juga dapat digunakan untuk mempermudah membaca sebuah statement.
likes(sasa,X):- is_male(X), owns(X,Y), is_taft(Y).
akan lebih mudah untuk dibaca jika penulisannya sebagai berikut,
sasa likes X:-X is male, X owns Y, Y is taft.
Standar tanda kurung ‘functor dan argumen’ notasi, misalnya likes (sasa,X) dapat
masih dapat digunakan dengan operator jika lebih disukai. ‘Mixed’ notasi juga diperbolehkan
operator dengan memasukkan tujuan menggunakan op predikat pada sistem prompt. Ini
membutuhkan 3 argumen, misalnya
fy berarti bahwa unary predicates dan akan dikonversikan ke operator prefix
operator.
Sebuah predikat juga dapat dikonversi ke operator dengan menempatkan sebuah baris seperti
?-op (150, xfy, likes).
operator dan dengan demikian ditulis antara dua argumen.
Cara yang paling umum adalah menggunakan / 2 adalah dimana argumen pertama adalah terikat
variabel. Mengevaluasi tujuan X -6,5 akan menyebabkan X untuk terikat dengan jumlah -6,5
dan tujuan untuk sukses.
Argumen kedua dapat berupa nomor atau ekspresi aritmatika misalnya
X adalah 6 * Y + Z-3.2 + P-Q / 4 (* menandakan perkalian).
Setiap variabel yang muncul dalam sebuah ekspresi aritmatika sudah harus terikat (sebagai
mengevaluasi hasil dari tujuan sebelumnya) dan nilai-nilai mereka harus numerik.
argumen akan terikat dengan nilai ekspresi aritmetik. Jika tidak, kesalahan
pesan akan muncul.
? – X 10,5 4,7 * 2.
X = 19,9
? – Y adalah 10, Z adalah Y 1.
Y = 10,
Z = 11
operator yang dikenal sebagai operator aritmetika. Tidak seperti operator digunakan di tempat lain di Prolog
mereka tidak predikat tetapi fungsi yang mengembalikan nilai numerik.
Seperti halnya angka-angka, variabel dan operator, ekspresi aritmatika dapat mencakup
fungsi aritmatika, ditulis dengan argumen mereka dalam tanda kurung (yaitu bukan sebagai
operator). Seperti operator aritmetika ini kembali nilai-nilai numerik, misalnya menemukan
akar kuadrat dari 36:
? – X adalah sqrt (36).
X = 6
menunjukkan perbedaan dua nilai numerik, misalnya X-6, tetapi juga sebagai awalan unary
operator untuk menunjukkan negatif dari sebuah nilai numerik, misalnya
? – X adalah 10, Y-X-2.
X = 10,
Y = -12
fungsi yang tersedia dalam Prolog.
X-Y selisih dari X dan Y
X * Y hasil kali X dan Y
X / Y hasil bagi X dan Y
X / / Y ‘integer hasil bagi’ dari X dan Y (hasilnya adalah dipotong ke terdekat integer antara itu dan nol)
X ^ Y pangkat
-X negatif X
abs (X) nilai absolut X
sin (X) sinus X (untuk X diukur dalam derajat)
cos (X) kosinus X (untuk X diukur dalam derajat)
max (X, Y) yang lebih besar dari X dan Y
sqrt (X) akar kuadrat X
Ada tiga jenis operator relasional untuk pengujian kesetaraan dan ketidaksetaraan tersedia dalam Prolog.
nilai.
? – 6 +4 =: = 6 * 3-8.
yes
? – Sqrt (36) +4 =: = 5 * 11-45.
yes
didefinisikan di bawah ini.
? – Checkeven (12).
yes
? – Checkeven (23).
no
? – Checkeven (-11).
no
? – Checkeven (-30).
yes
memotong hasilnya ke integer terdekat antara itu dan nol. Jadi 12 / / 2 adalah 6, 23 / / 2 adalah
11, -11 / / 2 adalah -5 dan -30 / / 2 adalah -15. Membagi sebuah integer dengan 2 menggunakan / / dan mengalikan
itu dengan 2 lagi akan memberikan bilangan asli jika bahkan, tetapi tidak sebaliknya.
Ekspresi aritmatika Ketidaksetaraan = \ =
E1 = \ = E2 berhasil jika ekspresi aritmetika E1 dan E2 tidak mengevaluasi ke
nilai sama
? – 10 = \ = 8 3.
yes
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 mengevaluasi tujuan.
X = _
? – likes (X, Prolog) == likes (Y, Prolog).
no
(X dan Y adalah variabel yang berbeda)
? – X adalah 10, pred1 (X) == pred1 (10).
X = 10
? – X == 0.
tidak
? – 6 4 == 3 +7.
no
Prefix operator bukan / 1 dapat ditempatkan sebelum tujuan untuk memberikan yang pengingkaran. Itu
tujuan menegasikan berhasil jika tujuan asli gagal dan gagal jika tujuan asli
berhasil.
Contoh berikut menggambarkan penggunaan tidak / 1. Diasumsikan bahwa
database berisi satu klausul
dog (fido).
? – not dog (fido).
no
? – dog (fred).
yes
? -not dog (fred).
yes
? – X = 0, X adalah 0.
X = 0
? – X = 0, bukan X adalah 0.
no
The pemisahan operator; / 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 Tujuan1 atau Tujuan2 berhasil.
? – 6 <3; 7 adalah 5 +2.
yes
? – 6 * 6 =: = 36; 10 = 8 3.
yes
12 Nov
OPERATOR AND ARITHMETIC
Practical Exercise 4.
I. Pada soal nomor 1 kita diperintah untuk mengonvert predikat menggunakan operator form seperti yang ada pada contoh. Dan hasilnya harus sama dengan program yang ada pada contoh.
Jadi yang kita lakukan adalah:
1.Ubah program awal(yang ada pada soal) dengan standar operator form.
Yang awalnya seperti ini:
Menjadi seperti ini:
2.Kemudian simpan hasil yang telah diubah dengan format .pl. Misalnya: prolog anjing.pl. Agar bisa di consult pada program prolog.
Jangan lupa untuk mengganti save as type menjadi All files.
3. Setelah menyimpan file tersebut, maka buka program prolog. Klik file –> consult
4. Kemudian pilih file ‘prolog anjing.pl’.
5. Setelah itu akan keluar tampilan seperti ini.
6. Kemudian ketikan X chases Y. Seperti tampilan berikut ini:
7. Selanjutnya tekan “enter”.
8. Untuk menampilkan selanjutnya tekan “;”. Hingga muncul tulisan “no”.
9. Jika dibandingkan dengan program yang ada pada soal,hasil keluarannya akan sama yaitu seperti ini:
a. Program seperti yang ada pada contoh soal.
b. Program yang telah diubah berdasarkan operator form.
10. Terbukti sama program yang seperti pada soal dengan yang telah diubah berdasarkan operator form.
II. Pada soal nomor 2, kita diperintah untuk membuat operator hitungan.
1. Melakukan hitungan rata-rata dari 2 buah bilangan.
Misal: X=30
Y=42
Maka kita mencari Z dengan rumus rata-rata yaitu (X+Y)/2
Dan hasilnya setelah ditekan enter adalah
2. Selanjutnya adalah menghitung akar dari hasil rata-rata tersebut.
3. Kemudian yang terakhir adalah menentukan hasil yang paling besar dari 2 perhitungan sebelumnya.
1 Nov
Fact, Rules, Predicates, and Variable in Prolog
Memunculkan Hewan-hewan yang Kita Inginkan dari Suatu Himpunan
-
- Copy data yang ada pada halaman 27 ke dalam notepad.
- Simpan dengan file extension .pl
- Buka prolog kemudian pilih File-Consult . Buka file yang telah disimpan tadi.
- Ketik animal(mammal,W,_,_). untuk mencari ‘all the mammals’. Lalu tekan enter. Kemudian akan muncul hewan mammal pertama, lalu tekan tombol ; untuk memunculkan semua No
- ketik animal(mammal,X,carnivore,_). untuk memunculkan hewan karnivor yg juga mammal. Lalu tekan enter .Maka muncul hewan pertama lalu tekan ; sampai muncul kata No
- Ketik animal(mammal,X,_,stripes). untuk memunculkan hewan mammal yang mempunyai strip belang, lalu tekan enter .Maka akan muncul hewan pertama, kemudian tekan tombol ; untuk memunculkan semua sampai muncul kata No
- Ketik animal(reptile,Z,_,mane). untuk memunculkan hewan reptil yang juga termasuk mane, lalu tekan enter. Karena tidak ada, maka langsung muncul kata No
Memunculkan Pasangan Male dan Female
- Buka notepad, kemudian copy data yang akan di-copy (yang ada di dalam modul) ke dalam notepad
- kemudian tambahkan perintah couple(L,P):-person(L,male),person(P,female). ke dalam notepad tersebut.
- Simpan dengan file extension .pl
- Buka prolog, pilih file-consult . Buka file yang telah disimpan tadi.
- Kemudian ketik couple(L,P). pada prolog tersebut. Lalu tekan enter dan setelah itu akan muncul pasangan kombinasi yang pertama.
- Lalu tekan tombol ; hingga muncul semua pasangan kombinasinya sampai muncul kata No.
14 Oct
hOw to List all possible combination
Dalam cabang ilmu matematika yang paling dikenal adalah teori himpunan. sebelum membahas bagaimana cara untuk mengkombinasikan sebuah himpunan pada prolog marilah kita berkenalan dengan himpunan terlebih dahulu . apa yang dimaksud dengan himpunan ? dan apa saja yang ada di dalamnya ? . Himpunan (set) adalah kumpulan obyek-obyek tidak urut (unordered) . Obyek dalam himpunan disebut elemen atau anggota (member) . Himpunan yang tidak berisi obyek disebut himpunan kosong (empty set). Universal set berisi semua obyek yang sedang dibahas .
Sekarang kita mencoba mengkombinasikan peluang yang keluar dari dua himpunan.Berikut , contoh peluang yang timbul dari dua buah himpunan nama-nama hewan dan manusia.
– Langkah-langkah yang harus ditempuh :
1 .Tuliskan anggota himpunan pada notepad , kemudian save dengan format .pl
2 .Buka program prolog, pilih File – consult – pilih data yang kita save dengan format .pl
3 .Pada program prolog,ketik hewan(X),manusia(Y).Dan jangan lupa beri titik pada akhir kalimat.Kemudian tekan enter.
4 .Maka akan keluar peluang yang muncul pertama.Lalu tekan titik koma ( ; ) sampai kemungkinan yang terakhir dan muncul tulisan NO
5 .Dapat mencoba kemungkinan lain, semisal manusia(X), hewan(Y) . ingat untuk selalu mengakhiri dengan tanda titik(.)
Ini sama dengan Cartesian products yang diajarkan pada matematika diskrit pertemuan ke 7 .
Ex :
Hewan {gorilla, kera, simpanse}
Manusia {riza, sony}
Maka Hewan x Manusia = {(gorilla,riza), (gorilla,sony), (kera, riza), (kera,sony), (simpanse, riza), (simpanse,sony)}
Atau lebih mudahnya dapat digunakan cara seperti ini ,
Gorilla Riza ,Sony
Kera Riza ,Sony
Simpanse Riza ,Sony