Revisi EXPERT SYSTEM: Sistem Pencarian Mobil pada Showroom mobil

Penjelasan Sistem Pakar:
Cak Lil, seorang pengusaha sukses, akhir – akhir ini sering kebingungan mengatasi para pelanggannya. Ia memiliki sebuah Showroom mobil bernama Cak Lil Motor. Di showroomnya, para pelanggan sering kali menanyakan mobil – mobil dengan tahun – tahun yang berbeda, sedangkan pegawai cak Lil hanya segelintir yang mengetahui tahun dan kondisi mobil di showroom tersebut.
Kami sekelompok, datang ke showroomnya, lihat situasi, lalu memberikan solusi terbaik(Lebay MODE: ON). Kami memberikan suatu Sistem pakar yang dapat mencari dan memilah data sesuai keinginan pelanggan – pelanggan cak Lil Motor. Sistem Pakar kami memakai perintah find. Sistem pakar ini memilah data – data sesuai inputan dari user. Dipilah sesuai Merk dan Tahun diatas Tahun produksi mobilnya. Jadi, para pelanggan tinggal memasukkan Merk dan Tahunnya dan melihat hasilnya berupa, Merk, jenis, Tahun produksi, Kondisi mobil dan Stok di showroom. Misal, anda mencari mobil Merk Toyota dengan Tahun produksi di atas tahun 2005, maka tinggal menginput find(toyota,2005). seperti yang dicontohkan di bawah ini.

Untuk membuatnya, gampangg!!! ^_^
Pertama, deklarasikan seperti di bawah ini, simpan dengan ekstensi .pl, consult di PROLOG. Data dapat ditambah sesuai dengan keinginan, karena data dibawah merupakan data dari Cak Lil Motor.

perintahnya adalah find(merek mobil,tahun diatas tahun produksi). contoh, find(toyota,2005). lalu enter dan lihat hasilnya seperti di bawah.

Leave a Comment

LOOPS

Hei… Di sini kita akan mempelajari tentang Loops..

Cekidot!!!

Exercise:
01)
Pertama, deklarasikan dan disimpan sebagai .pl, consult di PROLOG.

lalu ketik outsquare(10,20). pada PROLOG, tekan enter dan hasilnya adalah. Angka berapapun bisa asal, angka pertama lebih kecil dr angka kedua.

02)
Pertama, deklarasikan dan disimpan sebagai .pl, consult di PROLOG.

lalu ketik go. pada PROLOG, tekan enter lalu ketik kata yg di bawah, lalu enter. Dan hasilnya adalah. Kata apapun bisa.

03)
Pertama, deklarasikan dan disimpan sebagai .pl, consult di PROLOG.

lalu ketik find. pada PROLOG, tekan enter dan hasilnya adalah.

Sekian,,,

Leave a Comment

SUMMARY of LOOPS (Chp 6)

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(_,_).

Leave a Comment

INPUT AND OUTPUT

Hei… Di sini kita akan mempelajari tentang Input dan Output..

Cekidot!!!

Exercise:
01)
Pertama, deklarasikan dan disimpan sebagai .pl, consult di PROLOG.

lalu ketik makelower pada PROLOG., enter, lalu ketik kata – kata terserah anda, enter. Lihat apa yg terjadi.

02)
Pertama, deklarasikan dan disimpan sebagai .pl, consult di PROLOG.

lalu buat file bernama Infile.txt, berisi ini, lalu ketik copyterms(‘Infile.txt’,’Outfile.txt’). pada PROLOG.

dan hasilnya ialah.

03)
Pertama, deklarasikan dan disimpan sebagai .pl, consult di PROLOG.

lalu buat file bernama testa.txt, berisi ini, lalu ketik readfile(‘testa.txt’). pada PROLOG.

dan hasilnya ialah.

04)
Pertama, deklarasikan dan disimpan sebagai .pl, consult di PROLOG.

lalu buat file bernama in1.txt, berisi ini

lalu buat lagi file bernama in2.txt, berisi ini

lalu ketik combine(‘in1.txt’,’in2.txt’,’out.txt’). pada PROLOG, hasilnya ialah.

05)
Pertama, deklarasikan dan disimpan sebagai .pl, consult di PROLOG.

lalu buat file bernama 1.txt, berisi ini

lalu buat lagi file bernama 2.txt, berisi ini

lalu ketik compare(‘1.txt’,’2.txt’). pada PROLOG, hasilnya ialah.

Leave a Comment

SUMMARY of INPUT AND OUTPUT (Chp 5)

Outputting Terms

Utama predikat built-in yang disediakan untuk istilah keluaran write / 1, yang telah
telah digunakan berkali-kali dalam buku ini.
Yang write / 1 predikat mengambil satu argumen, harus yang valid Prolog
istilah. Mengevaluasi menyebabkan predikat istilah yang akan ditulis ke arus keluaran
, yang secara default adalah layar pengguna. (Yang dimaksud dengan arus keluaran
Dengan 70 Logika Pemrograman Prolog
streaming akan dijelaskan dalam Bagian 5,7 dan 5.8. Saat ini hanya dapat diambil
oleh pengguna layar.)
Built-in predikat nl / 0 juga telah digunakan berkali-kali sebelumnya dalam buku ini. diperlukan tanpa argumen. Mengevaluasi sebuah tujuan nl menyebabkan baris baru untuk menjadi output untuk aliran keluaran(the current output stream).

Contoh:
? – Menulis (26), nl.
26
ya

? – Menulis ( ‘string karakter’), nl.
string karakter
ya

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

? – Tulis (mypred (a, b, c)), nl.
mypred (a, b, c)
ya

? – Write ( ‘Contoh penggunaan nl’), nl, nl, write ( ‘akhir contoh’), nl.
Contoh penggunaan 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 menulis / 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

Inputing Terms

Built-in predikat read / 1 disediakan untuk memasukkan istilah. Dibutuhkan satu argumen,
yang harus menjadi variabel.
Mengevaluasi itu menyebabkan istilah berikutnya untuk dibaca dari current input stream
yang secara default adalah pengguna keyboard. (Yang dimaksud dengan arus input yang akan
dijelaskan dalam Bagian 5,7 dan 5,9. Saat ini hanya dapat diambil untuk
pengguna 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 masukan dari keyboard (hanya) sebuah prompt karakter seperti titik dua
biasanya akan ditampilkan untuk menunjukkan bahwa input pengguna diperlukan. Mungkin perlu
untuk tekan tombol ‘kembali’ tombol sebelum Prolog akan menerima input. Kedua tidak
berlaku untuk masukan dari file.
Ketika sebuah tujuan membaca dievaluasi, istilah input disatukan dengan argumen
variabel. Jika variabel tidak terikat (yang biasanya terjadi) itu adalah terikat pada
masukan nilai.

Input and Output Using Character

Sebuah pendekatan yang lebih baik untuk menentukan predikat (menggunakan baca) yang akan membaca serangkaian karakter dari keyboard dan menghitung jumlah huruf vokal yaitu mengetahui tentang nilai ASCII karakter.
Semua mencetak karakter dan banyak karakter non-cetak (seperti ruang dan
tab) memiliki sesuai ASCII (American Standard Kode untuk Informasi
Interchange) nilai, yang merupakan integer 0-255. Nilai ASCII karakter yang kurang dari atau sama dengan 32 yang dikenal sebagai ruang putih karakter.

Outputting Characters

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

Inputting Characters

Dua predikat built-in disediakan untuk memasukkan satu karakter: get0 / 1 dan get / 1.
Get0 predikat yang mengambil satu argumen, yang harus menjadi variabel. Mengevaluasi
tujuan get0 menyebabkan karakter untuk dibaca dari input saat ini sungai. Variabel
kemudian disatukan dengan nilai ASCII karakter ini.
Perhatikan bahwa untuk masukan dari keyboard (hanya) sebuah prompt karakter seperti titik dua
biasanya akan ditampilkan untuk menunjukkan bahwa input pengguna itu diperlukan. Mungkin perlu
untuk tekan tombol ‘kembali’ sebelum Prolog akan menerima input. Kedua juga
berlaku untuk mendapatkan predikat dijelaskan di bawah ini tetapi tidak berlaku untuk masukan dari file.
Mengasumsikan argumen variabel tak terikat (yang biasanya akan terjadi), itu
terikat ke nilai ASCII karakter input.
Jika variabel argumen sudah terikat, tujuan berhasil jika dan hanya jika memiliki
nilai numerik yang sama dengan nilai ASCII karakter inputan.Yang mendapatkan 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 current input stream.
variabel ini kemudian disatukan dengan nilai ASCII karakter ini dengan cara yang sama
untuk get0.

Using Characters: Examples

Readin predikat 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 karakter a*. 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 karakter a * yang dibaca.Adajuga versi yang diperluas yaitu 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 * ‘. Ada juga program rekrusif yaitu didasarkan dari 2 sebelumnya yang
menunjukkan bagaimana membaca dalam serangkaian diakhiri dengan karakter * dan menghitung jumlahvokal. 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 huruf hidup sejauh ini ‘dan’ jumlah total huruf hidup ‘. Tiga argumen proses predikat dapat dibaca sebagai “nilai ASCII karakter input ‘,’ yang jumlah huruf hidup sampai dengan tetapi tidak termasuk karakter ‘dan’ jumlah total
huruf hidup ‘, masing-masing.Pertama dua argumen dari predikat processChar dapat ditafsirkan dalam cara yang sama seperti untuk proses, tetapi argumen ketiga adalah “jumlah huruf hidup dan termasuk karakter (argumen pertama) ‘.Predikat huruf hidup tes untuk salah satu dari 10 kemungkinan huruf hidup (lima huruf dan lima huruf kecil), menggunakan nilai-nilai ASCII.


Input and Output Using Files

Prolog mengambil semua input dari current input stream dan menulis semua output ke
current output stream. Secara default kedua urutan ini bernama pengguna,
menunjukkan pengguna terminal, yaitu untuk input keyboard dan layar untuk memperoleh keluaran. 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.

File Output: Changing the Current Output Stream

current output stream dapat diubah menggunakan tell / 1 predikat. Ini membutuhkan
argumen tunggal, yang merupakan atom atau variabel yang mewakili nama file, misalnya
kirim ( ‘outfile.txt’). Mengevaluasi tell menyebabkan file bernama untuk menjadi arus keluaran 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 current output stream sebelumnya tetap terbuka ketika current output stream baru dipilih. Hanya current ouput stream dapat ditutup .Output ke sebuah File
Meskipun definisi di atas tell menyatakan bahwa ‘semua file yang sudah ada dengan yang sama Namanya dihapus ‘, ada kemungkinan lain, yang penting bagi beberapa
aplikasi, yaitu bahwa file tersebut tidak dihapus dan setiap output ditempatkan setelah
akhir isi yang ada file. Baik ‘menimpa’ dan ‘append’ pilihan kemungkinan besar akan tersedia dalam pelaksanaan praktis Prolog tetapi mungkin melibatkan menggunakan predikat yang berbeda (misalnya terbuka) sebagai pengganti atau serta tell.

File Input: Changing the Current Input 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, misalnya0see ( ‘myfile.txt’). Mengevaluasi sebuah tujuan see menyebabkan file bernama curent input 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 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 current input stream.

Reading from 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 mendapatkan (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.

Reading from 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.
Perhatikan penggunaan put daripada write dan bahwa tes untuk nilai ASCII 13 menghindari kebutuhan untuk karakter seperti * untuk menunjukkan ‘akhir input’

?- readline.
: Prolog test
P
r
o
l
o
g

t
e
s
t
yes

Using Files: Examples

Contoh 1
Menyesuaikan program terakhir yang diberikan dalam Bagian 5.6 untuk membaca karakter dalam file teks
myfile.txt sampai karakter * dan output tercapai jumlah huruf hidup ke
terminal pengguna (i.e. layar).
Hanya baris pertama dari program sebelumnya perlu diubah, untuk:

go(Vowels):-see(‘myfile.txt’),count(0,Vowels),seen.

Contoh 2
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),tell(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:
‘first term’. ‘second term’.
‘ third term’.
‘fourth term’. ‘fifth term’.

menggunakan readterms memberikan output singkat berikut:

?- readterms(‘textfile.txt’,’outfile.txt’).
yes

dan membuat sebuah file dengan empat baris teks
first term
second term
third term
fourth term

Contoh 3
tentukan sebuah predikat copychars untuk menyalin karakter input (sebagai satu baris) di
pengguna terminal untuk file tertentu, sampai karakter! dimasukkan (karakter ini
tidak boleh disalin).
Dalam program di bawah ini, terutama copychars menyimpan dan mengembalikan nilai-nilai
input dan output stream. Sisa tugas yang tersisa untuk copy_characters,
yang didefinisikan secara rekursif dalam cara yang mirip dengan readin dalam contoh pertama di
Bagian 5.6.

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 sebagai berikut

?- copychars(‘myfile.txt’).
: abxyz!
Yes

akan menempatkan karakter dalam file abxyz myfile.txt.

Ringkasan Bab
Bab 5 ini menjelaskan kepala predikat built-in yang tersedia untuk kedua istilah tersebut dengan istilah dan
karakter demi karakter input dan output dan untuk membaca dan menulis file. Juga
memperkenalkan gagasan tentang nilai ASCII karakter.

Leave a Comment

Expert System(Sistem Pakar) Untuk Menentukan Tipe Orang dari Status Facebooknya

Setiap orang memiliki tipe – tipe berbeda. Tipe – tipe tersebut dibedakan menjadi 9 macam, yaitu Manusia Super Update, Manusia Melankolis, Manusia Sombong, Manusia in English, Alay, Bioskop Mania, Tipe Kaskuser, Tipe Hidden Message, dan Tipe Misterius. Dengan Expert System kita bisa menentukan tipe seseorang melalui status Facebooknya.

Ciri-ciri Manusia Super Update:
-Kapanpun dan dimanapun update status,
-Statusnya tidak terlalu panjang,
-terlihat membuat risih, karena hal – hal yang tidak terlalu penting juga dia publikasikan.

Ciri-ciri Manusia Melankolis:
-Sering curhat di status,
-Suka menceritakan kisahnya,
-Menanyakan solusi yg terbaik kepada yang lain.

Ciri-ciri Manusia Sombong:
-mereka ga berniat menyombongkan diri, tapi terkadang orang yang melihatnya, yang notabene tidak bisa seberuntung dia, merasa kalo statusnya itu kelewat sombong, dan malah bikin sebel.

Ciri-ciri Manusia in English:
-Tipe manusianya bisa seperti apa saja, apakah melankolis, puitis, sombong dan sebagainya,
-dia berusaha lebih keren dengan mengatakannya dalam bahasa Inggris.

Ciri-ciri Alay:
-updatenya gaul – gaul,
-bahasa terlalu dewa,
-ejaan yang dialaykan.

Ciri – ciri Bioskop Mania:
-update film yang abis ditonton dan kasih comment.

Ciri – ciri Tipe Kaskuser:
-ada kata “Pertamaxxx”, “gan”, “cendol”, “ngaskus” di setiap status.

Ciri – ciri Tipe Hidden Message:
-Sering tidak to the point, tapi tentunya punya niat biar orang yg dituju membacanya.

Ciri – ciri Tipe Misterius:
-Membuat banyak orang bertanya – tanya atas apa maksud dari status orang tersebut,
-Status tidak lebih dari dua(2) suku kata.

maka dengan Expert System, kita dapat menggunakan, bila seseorang memiliki ciri -ciri seperti diatas maka orang tersebut memiliki tipe sesuai cirinya.

Contoh:
-if statusnya “Tie and Chair..”, “I can tooth, you Pink sun..” dsb.. then tipenya Manusia in English.
-if statusnya “DucH Gw4 5aYan9 b6t s4ma Lo..7aNgaN tin69aL!n akYu ya B3!bh..!!”, “Ouh mY 9oD..!! kYknY4w c gW k3ReNz 48ee5h d3ch..!!” then tipenya Alay.
-if statusnya "2012.. REcomended!!" then tipenya Bioskop Mania.
-if statusnya 'PERTAMAXXXX GAN!', 'kalo berkenan cendolnya donk gannn', 'aduh sial gagal pertamax di trid sendiri' then tipenya Kaskuser.
-if statusnya "For you my M***, I can't live without you..you are my bla bla bla.." then tipenya Hidden Message.

Bagaimana bila seseorang memiliki tipe yang berlainan atau keluar dari ciri – ciri yang ada,
berarti orang tersebut memiliki dua(2) ato lebih tipe, namun pasti orang tersebut memiliki tipe yang dominan.

Dengan mengetahui tipe – tipe orang, memudahkan kita bagaimana untuk bersosialisasi atau bersilaturahmi dengan orang tersebut.

Leave a Comment

Summary of OPERATOR AND ARITHMETIC (Chp 4)

· Operator

Notasi yang digunakan untuk predikat adalah salah satu dari standar pengguna diikuti oleh sejumlah argumen dalam kurung, misalnya suka (john, mary).

Sebagai alternatif, apapun predikat yang ditetapkan pengguna dengan dua argumen (binary predikat) dapat dikonversi ke operator infiks. Hal ini memungkinkan functor (predikat nama) yang akan ditulis di antara dua argumen tanpa tanda kurung, misalnya john suka mary.

Setiap predikat yang ditetapkan pengguna dengan satu argumen (a unary predikat)dapat diubah menjadi prefiks operator. Hal ini memungkinkan untuk functor ditulis sebelum argumen tanpa tanda kurung. Notasi operator juga dapat digunakan dengan mudah dibaca aturan untuk bantuan. Setiap predikat yang ditetapkan pengguna dengan satu atau dua argumen dapat dikonversi ke operator dengan memasukkan tujuan menggunakan op predikat pada sistem prom.

Ada bentuk lain untuk menulis suatu predikat selain bentuk standar yang sudah dipelajari pada bab sebelumnya. Untuk binary predicate yaitu predikat dengan dua argumen dapat diubah menjadi bentuk infix operator.

bentuk standard tersebut dapat diubah menjadi infix operator

Kemudian untuk bentuk unary predikat (predikat dengan satu argumen) dapat diubah menjadi bentuk prefix operator atau postfix operator.

atau bisa juga diubah menjadi postfix operator

contoh :

main (budi,main)

bentuk standar tersebut dapat diubah menjadi infix operator
budi main bola.

Kemudian untuk bentuk unary predikat yaitu predikat dengan satu argumen dapat diubah menjadi bentuk prefix operator atau postfix operator.

Contoh :

mbois(budi)

bentuk tersebut diubah menjadi prefix operator mbois budi atau bisa juga diubah menjadi postfix operator budi mbois

· Arithmetic

Pada prolog terdapat juga fasilitas penghitungan aritmatika. Pembahasan tentang aritmatik dibagi menjadi beberapa bagian .

a. Arithmetic Operator

Merupakan operator yang digunakan untuk penghitungan aritmatik dalam pemprograman prolog .

Berikut ini contoh penggunaan masing-masing operator ;

X+Y (penjumlahan dari X ditambah Y)

X-Y (selisih dari X dikurangi Y)

X*Y (hasil perkalian dari X dan Y)

X/Y (hasil pembagian dari X dibagi oleh Y)

X//Y (integer hasil bagi dari X dan Y (hasilnya adalah dibagi ke integer terdekat antara hasil dan nol)

X^Y (nilai dari X pangkat Y)

-X (nilai negatif dari X)

b. Arithmetic function

Merupakan fungsi yang biasanya digunakan untuk melakukan penghitungan aritmatik dalam prolog .

Berikut adalah contoh masing-masing penggunaannya :

abs(X) (nilai absolut dari X)

sin(X) (nilai sinus dari X untuk X dalam derajat)

cos(X) (nilai cosinus dari X untuk X dalam derajat)

max(X,Y) (menentukan mana yang lebih besar antara X dan Y)

sqrt(X) (nilai dari X akar pangkat dua)

c. Pengutamaan Operator Dalam Ekspresi Aritmatika

Prolog menggunakan algoritma aljabar biasa dalam pengopersian aritmatika. Contohnya A+B*C-D.

Di dalam ajabar C dan D dikalikan lebih dahulu lalu ditambah dengan A lalu dikurangi dengan D. DI prolog juga demikian. Untuk pengecualian, kita tinggal menggunakan kurung.

Contoh : (A+B)*(C+D).

d. Relational Operators

Operator seperti =, !=, >,>=, <, =dibaca : nilai x tidak sama dengan 0

x >= 0 —>dibaca : nlai x lebih dari sama dengan 0

· Operator Pembanding

Dibawah ini merupakan daftar dari equality operators dalam prolog beserta fungsi dari masing-masing operator.
o Arithmetic Expression Equality =:=
o Arithmetic Expression Inequality =|=
o Terms Identical ==
o Terms Not Identical |==
o Terms Identical With Unification =
o Non-Unification Between Two Terms |=

· Operator Logika

1. Operator Not
Operator not dapat ditempatkan sebelum predikat untuk memberikan negasi. Predikat yang dinegasikan bernilai benar jika predikat yang asli salah dan bernilai salah jika predikat yang asli benar.

berikut contohnya :

?- not dog(fido).
no
?- dog(fred).
no
?- not dog(fred).
yes
?- X=0,X is 0.
X = 0
?- X=0,not X is 0.

no

2. Operator Disjungsi
Operator disjungsi (;) digunakan sebagai operator ‘atau’.

berikut contohnya :

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

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

Leave a Comment

OPERATOR AND ARITHMETIC O2

Di bagian kedua ini, kita diperintah untuk membuat operator hitungan.

Langkah 1: Melakukan hitungan rata-rata dari 2 buah bilangan.
Misal: X=45
Y=53
Maka kita mencari Z dengan rumus rata-rata yaitu (X+Y)/2

Dan hasilnya setelah ditekan enter adalah:

Langkah 2: Menghitung akar dari hasil rata-rata tersebut.
Maka kita mencari I dengan sqrt(Z).

Dan hasilnya setelah ditekan enter adalah:

Langkah 3: Menentukan hasil yang paling besar dari 2 perhitungan sebelumnya.
Maka kita mencari J dengan max(Z,I).

Dan hasilnya setelah ditekan enter adalah:

Leave a Comment

OPERATOR AND ARITHMETIC 01

Di bagian pertama, 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 mengubah program awal(yang ada pada soal) dengan standar operator form.
Yang awalnya seperti ini:

Menjadi seperti ini:

Kemudian Consult di PROLOG dan ketik chases(X,Y). dan Ketik ; sampai No:

Dibandingkan dengan program yang ada pada soal:
Program seperti yang ada pada contoh soal.

Program yang telah diubah berdasarkan operator form.

Terbukti, program yang seperti pada soal dan program yang telah diubah berdasarkan operator form adalah sama!!

Leave a Comment

Fact, Rules, Predicate, and Variable in Prolog.

Memunculkan Hewan-hewan yang Kita Inginkan dari Suatu Himpunan!

Pertama, anda buat deklarasi seperti ini…

Kemudian, Consult, Open di PROLOG…

Ketik animal(mammal,W,_,_). untuk mencari semua hewan mammal. Lalu tekan enter. Kemudian akan muncul hewan mammal pertama, lalu tekan tombol ; untuk memunculkan kata No…

Ketik animal(mammal,X,carnivore,_). untuk memunculkan hewan carnivore 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 memiliki stripes, lalu tekan enter .Maka akan muncul hewan pertama, kemudian tekan tombol ; untuk memunculkan semua hewan sampai muncul kata No…

Ketik animal(reptile,Z,_,mane). untuk memunculkan hewan reptile yang juga termasuk mane, lalu tekan enter. Karena tidak ada yang cocok di database, maka langsung muncul kata No…

Memunculkan Pasangan Male dan Female

Pertama, anda buat deklarasi seperti ini, tambahkan perintah couple(L,P):-person(L,male),person(P,female). ke dalam notepad tersebut…

Kemudian, Consult, Open di PROLOG…

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…

Leave a Comment

Older Posts »