Gabung Ke Forum Saya Di 4KA01

Program INPUT & OUTPUT PROLOG

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


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


Contoh penggunaan dari predikat-predikat diatas adalah sebagai berikut:
1 ?- write(‘matdis itu asik’).
matdis itu asik
Yes
2 ?- writeq(‘hati-hati’).
‘hati-hati’
Yes
3 ?- writeq(‘hati’).
hati
Yes
4 ?- writeq(‘hati-hati dengan hati’).
‘hati-hati dengan hati’
Yes
5 ?- write(‘maju terus pantang mundur’),nl,nl,writeq(‘mundur terus kapan majunya?’).
maju terus pantang mundur
‘mundur terus kapan majunya?’
Yes.


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


Contoh penggunaan dari predikat-predikat diatas adalah sebagai berikut:
1 ?- read(X).
|: 1000.
X = 1000
Yes
2 ?- read(Y).
|: ‘jika ini maka itu’.
Y = ‘jika ini maka itu’
Yes
3 ?- X=joko,read(X).
|: joko.
X = joko
Yes


Menggunakan Input dan output dengan karakter
Untuk problem seperti membaca sebuah seri karakter dari keyboard dan menghitung jumlah huruf hidupnya, akan lebih efektif jika menggunakan input sebuah karakter. Untuk melakukan hal tersebut kita harus terlebih dahulu mengetahui nilai ASCII untuk sebuah karakter. Semua printing karakter dan non-printing karakter (spasi, tab) mempunyai hubungan dengan nilai ASCII, yaitu bilangan bulat dari 1 sampai 255.
Menampilkan Output dengan Karakter
Menampilkan Output Karakter digunakan dalam predikat put/1. Predikat ini menggunakan satu argumen, dengan nilai berupa angka antara 0 – 255 atau pernyataan yang memiliki nilai integer sesuai batasan tadi.Penggunaan tujuan put menghasilkan sebuah karakter yang merupakan output dari urutan output. Karakter ini berhubungan dengan nilai numerik (nilai ASCII) dari argumen yang digunakan
Contoh :
?- put(97),nl.
a
yes
?- put(122),nl.
z
yes
kedua contoh di atas merupakan output dari nilai 97 dan 122. Seperti kita ketahui dalam ASCII nilai 97 dan 122 merupakan nilai untuk huruf a dan z.


Menginput Karakter
get0/1 dan get/1 merupakan predikat yang disediakan untuk melakukan input sebuah karakter. Predikat get0 memerlukan sebuah argumen yang variatif. Tujuan pengggunaan get0 adalah untuk membaca karakter yang d input dari sebuah urutan penginputan. Variabel inilah yang nantinya akan disatukan dengan nilai ASCII dari karakter tersebut.
Pertama kita asumsikan bahwa variabel dari argumen ini tidak terikat, nantinya variabel argumen akan terikat sesuai dengan nilai ASCII dari karakter yang diinput.
Contoh :
?- get0(N).
: a
N = 97 % nilai N merupakan nilai ASCII dari huruf a (kecil)
?- get0(N).
: Z
N = 90
Jika variabel dari argumen tersebut sudah terikat, maka tujuan akan berhasil jika dan hanya jika nilai numeriknya sama dengan nilai ASCII dari karakter yang di input.
Sebahai contoh :
?- get0(X).
: a
X = 97
?- M is 41,get0(M).
: )
M = 41 % karena nilai M sudah ditentukan 41 maka hasil nilai dari hasil inputan akan tetap sesuai dengan nilai dari M
?- M =dog,get0(M).
: )
No     % nilai dari “)” tidak terdefinisikan karena nilai M sudah ditentukan yaitu “dog” dan dog ini bukan merupakan nilai integer antara 0 – 255.
Predikat get yang menggunakan sebuah argumen, yang berupa sebuah variabel. Penggunaan predikat get0 dalam goal menyebabkan karakter bukan white-space (karakter dengan nilai ASCII kurang dari atau sama dengan 32) dibaca dari urutan input.
Sebagai contoh :
?- get(X).
: Z
X = 90
?- get(M).
: Z
M = 90       % walaupun menggunakan “spasi” dalam melakukan input, nilai yang tetap dibaca adalah nilai dari huruf “Z”.
Penggunaan predikat readin bersifat rekursif.  Untuk contohnya adalah sebagai berikut :
readin :- get0(X),process(X).
process (42).
Process(X) : – X=\=42, write(X),nl,readin.
Jika kita lakukan inputan di atas maka akan menghasilkan
?- readin..
: Prolog Examples* % karakter yang akan dibaca
80
114
111
108
103
32
69
120
97
109
112
108
101
yes
Dari contoh di atas dapat kita lihat bahwa proses yang dilakukan untuk (process (X)) tergantung dari ada tidaknya nilai X yang memiliki nilai 42( hal ni ditandai dengan penggunaan karakter “*”) dari inputan yang dilakukan. Jika memiliki nilai tersebut, maka pencarian untuk tujuan selesai sampai tanda “*” tersebut, apabila tidak maka proses akan tetap berjalan sampai ditemukan karakter “*”.
File Output : Merubah Urutan Output Saat Ini
Menggunakan :
  • tell/1, misal tell(‘outfile.txt’)
  • told
default-nya: user
built-in:
  • told/0, tanpa argumen, menyebabkan file output ditutup dan kembali ke user
  • telling/1, tanpa argumen, menyebabkan variabel menjadi terikat dengan nama file
File Input : Merubah Urutan Input Saat Ini
Menggunakan:
  • see/1, misal see(‘myfile.txt’)
  • seen
default-nya: user
built-in:
  • seen/0, tanpa argumen, menyebabkan file output ditutup dan kembali ke user
  • seen/1, tanpa argumen, menyebabkan variabel menjadi terikat dengan nama file
Membaca Dari File: End Of File
Jika pada saat menjalankan perintah read(X) terjadi kegagalan maka variabel X akan menjadi terikat dengan atom end_of_file.
Jika pada saat menjalankan perintah get(X) atau get0(X) terjadi kegagalan maka variabel X akan menjadi terikat dengan nilai berupa angka tertentu.
Membaca dari File : End Of Record
Pada End of Line diindikasikan dengan karakter ASCII bernilai 13, sedangkan End of Record diindikasikan dengan 2 buah nilai karakter ASCII bernilai 13 diikuti oleh 10
Contoh:
readline:-get0(X), process(X).
process(13).
Process(X):–X=\=13, put(X), nl, readline.
Contoh Penggunaan File (mengacu pada penggunaan karakter)
Tentukan sebuah predikat copychars untuk menyalin karakter input (sebagai sebuah baris tunggal) pada user’s terminal untuk file tertentu, sampai karakter !dimasukkan (karakter ini
tidak boleh disalin).
Pada program di bawah ini, fungsi utama copychars adalah menyimpan dan mengembalikan nilai-nilai pada aliran input dan output terakhir. Sisa tugas yang tersisa untuk copy_characters,
yang didefinisikan secara rekursif dengan cara yang mirip dengan readin dalam contoh di atas.
copychars(Outfile):- telling(T),tell(Outfile),
\copy_characters,told,tell(T).
copy_characters:-get0(N),process(N).
/* 33 is ASCII value of character ! */
process(33).
process(N):-N=\=33,put(N),copy_characters.
Menggunakan copychars seperti contoh berikut
?- copychars(‘myfile.txt’).
: abxyz!
Yes
akan menempatkan karakter abxyz dalam file myfile.txt.
Berikut ini adalah salah satu contoh tugas, yang bernama makelower. Disini kita akan mencoba mengubah dari huruf besar menjadi huruh kecil
This is an Example 123 inCLUDing numbers and symbols +-*/@[]XYz
sebelumnya yang perlu kita lakukan adalah membuat file makelower.pl dahulu, di dalam file ini berisi aturan / rule untuk mengubahnya. berikut ini adalah rule yang akan kita buat :
makelower :- get0(X),process(X).
process(13).
process(X) :- X=\=13,case(X,Y),put(Y),makelower.
case(X,Y) :- 64 < X, X < 91, Y is X + 32.
case(X,Y) :- Y is X + 0.
Berikut ini adalah tampilan aturan / rule dalam notepad
Seperti biasa rule yang sudah kita buat lalu kita simpan dengan ekstensi .pl.
Setelah berhasil disimpan maka langkah selanjutnya adalah meng-consult filemakelower.pl tadi ke dalam program PROLOG. Bila berhasil maka akan seperti gambar di bawah ini :
langkah berikutnya adalah mencoba aturan/rule yang kita buat tadi apakah berhasil atau tidak. Untuk mencobanya maka kita ketikkan perintah / commandmakelower. di PROLOG
Setelah meng-input perintah tadi lalu kita tekan tombol Enter dan kita lanjutkan dengan melakukan input terhadap kata/kalimat yang akan kita ubah menjadilower case. Berikut ini adalah contoh kata/kalimatnya :
This is an Example 123 inCLUDing numbers and symbols +-*/@[]XYz

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


0 Komentar: