Tuesday 10 June 2014

KBP pert 13



Logic Programming
Programming pada bahasa logic di ekspresikan dengan bentuk logic simbol. Menggunakan logical inferencing process untuk menghasilkan produk, bersifat declarative disbanding dengan procedural.

Symbolic Logic
Logic dapat di gunakan untuk :
-          Mengekspresikan proposisi
-          Mengekspresikan hubungan antara proposisi
-          Menjelaskan bagaimana proposisi baru dapat mengganggu proposisi yang lain.
Bentuk symbolic logic yang digunakan untuk symbolic logic programming dipanggil predikat kalkulus.

Objek representasi
Objek pada proposisi biasa di representasikan dengan syarat simple : konstan atau variable.
Konstan : symbol yang merepresentasikan objek.
Variable : symbol yang merepresentasikan objek lain pada waktu lain

Compound term
Atomic proposisi : mengandung compound term
Compound term = satu elemen pada hubungan matematika, ditulis seperti fungsi matematika (mapping).
Functor =  fungsi symbol yang menamai hubungan.
Contoh :
student(jon)                             // jon is student
            like(seth, OSX)                       // seth like OSX
            like(nick, windows)                //nick like windows
            like(jim, linux)                         //jim like linux



PROLOG adalah kependekan dari PROgramming in LOGic, yang berarti pemrograman
logika. Pemrograman Prolog menggunakan bahasa deklaratif, dimana pemrogram
memberi fakta dan aturan untuk selanjutnya diselesaikan oleh Prolog secara deduktif
sehingga menghasilkan suatu kesimpulan. Hal ini berbeda dengan bahasa prosedural
seperti Pascal, Fortran, C, atau yang sejenis, dimana pemrogram memberi perintah atau
penugasan untuk memecahkan persoalan langkah demi langkah, sehingga sering disebut
sebagai programming with assignment. Disamping itu, berbeda dengan pemrograman
fungsional, pemrograman logika ini menggunakan relasi, bukan fungsi sehingga sangat
sesuai untuk implementasi sistem pakar.

LOGIKA PREDIKAT
Logika predikat (kalkulus predikat) merupakan bagian dari komputasi logika yang juga
mencakup aljabar Boole (logika proposisional), dimana fakta dan aturan dinyatakan
melalui predikat seperti:
lelaki(Joko) // fakta
menikah(Joko, Tuti) // fakta
x y [menikah(x,y) lelaki(x)] ~ lelaki(y) // aturan
y x [orang(y) ibu(x,y) // aturan
Kalimat pertama menunjukkan adanya fakta bahwa Joko adalah seorang lelaki, dan
kalimat kedua menyatakan bahwa Joko menikah dengan Tuti. Kalimat ketiga dan
keempat menunjukkan suatu aturan atau kaidah yang umum berlaku, bahwa untuk setiap
pasang orang x dan y, jika x menikah dengan y dan x adalah lelaki, maka dapat
dipastikan bahwa y adalah bukan seorang lelaki. Sedangkan kalimat terakhir manyatakan
bahwa untuk setiap y, ada x sehingga jika y adalah orang maka y mempunyai seorang ibu
x (x ibu dari y).
Simbol predikat yang digunakan dalam kalimat-kalimat tersebut adalah lelaki, menikah,
orang, dan ibu yang sering disebut sebagai relasi, sedangkan Joko dan Tuti disebut
sebagai simbol konstanta.

BAHASA DEKLARATIF
Seperti yang dijelaskan sebelumnya bahwa pokok perbedaan Prolog dari bahasa lain
adalah karena bersifat deskriptif atau deklaratif, sedang bahasa lain umumnya bersifat
prosedural atau imperatif. Sebagai bukti bahwa Prolog merupakan bahasa deklaratif
adalah dalam menyatakan fakta dan aturan seperti berikut:
1. Jika ingin menyatakan bahwa Prawiro adalah bapak dari Joko, maka dalam Prolog
dituliskan sebagai:
bapak(prawiro, joko).
2. Jika ingin menerangkan suatu kaidah bahwa A adalah kakek dari Z maka harus dibuat
dahulu logika dalam bahasa Indonesia sehingga menjadi suatu aturan seperti berikut:
A adalah kakek dari Z jika A adalah bapak dari X dan X adalah bapak Z
atau
A adalah kakek dari Z jika A adalah bapak dari X dan X adalah ibu Z
Aturan tersebut ditulis dalam Prolog sebagai:
kakek(A,Z) :- bapak(A,X), bapak(X,Z).
kakek(A,Z) :- bapak(A,X), ibu(X,Z).

DASAR PEMROGRAMAN PROLOG
Pada bagian ini akan diuraikan dasar-dasar pemrograman Prolog, aturan umum penulisan
program, bagaimana melakukan dialog dengan Prolog, dan beberapa pengertian dasar
yang berkaitan dengan program Prolog.

Fakta
Fakta adalah suatu kenyataan atau kebenaran yang diketahui, dan menyatakan hubungan
(relasi) antara dua atau lebih obyek. Fakta dapat pula menunjukkan sifat suatu obyek.
Contoh sederhana adalah:
bapak(prawiro, joko).
merah(darah).
asin(garam).

Aturan
Aturan merupakan logika yang dirumuskan dalam bentuk relasi sebab-akibat dan
hubungan implikasi. Misalnya dapat dibuat aturan bahwa jika A adalah bapak dari X dan
X adalah bapak atau ibu dari Z maka dapat dipastikan bahwa A adalah kakek dari Z.
Contoh untuk ini adalah:
kakek(A,Z) :- bapak(A,X), bapak(X,Z).
kakek(A,Z) :- bapak(A,X), ibu(X,Z).

Klausa (clause)
Aturan yang ditulis ini berupa klausa (clause) dan terdiri dari kepala (kakek) dan tubuh
yang dipisahkan oleh tanda :- (bapak dan ibu). Klausa adalah suatu frase (ungkapan) atau susunan kata yang di dalam Prolog dapat berupa fakta atau aturan, yang selalu
diakhiri dengan tanda titik (.). Suatu tubuh klausa dapa terdiri dari beberapa sub-klausa
yang dihubungkan satu sama lain menggunakan tanda koma (,) yang berarti hubungan
and dan tanda titik koma (;) yang menunjukkan hubungan or. Penggabungan dalam
tubuh klausa yang dirangkai dengan and disebut sebagai konjungsi, sedangkan jika
dirangkai dengan or disebut disjungsi. Berikut disajikan contoh penggabungan disjungsi
untuk menuliskan aturan kakek sebelumnya:
orangtua(P,Q) :- bapak(P,Q); ibu(P,Q).
kakek(A,Z) :- bapak(A,X), orangtua(X,Z).

Relasi
Istilah merah, asin, kakek, bapak, ibu, dan orangtua pada contoh fakta dan aturan
sebelumnya disebut sebagai relasi. Relasi adalah tabel dengan n buah kolom dan terdiri
dari beberapa baris fakta maupun aturan. Misalkan relasi append adalah sekumpulan
tuple (X,Y,Z) dimana Z terdiri dari elemen X diikuti dengan Y atau Z=X+Y. Anggota
relasi append terdiri dari :
([], [], [])
([a], [], [a])
([a],[b],[a,b])
([a,b],[c,d],[a,b,c,d])

sedangkan ([a],[b],[]) bukan anggota relasi append.
Secara umum, suatu relasi dinyatakan dalam bentuk aturan atau fakta sebagai berikut:

P if Q1 and Q2 and ... and Qk untuk k>= 0

Sedangkan dalam notasi EBNF dapat dituliskan sebagai:

Rule::=Term:-Term {Term}
Term::=Number|Atom|Var|Atom(Term)
Term::=Term{Term}

atau dalam Prolog ditulis sebagai:

P:-Q1,Q2,...,Qk

Fakta adalah aturan untuk k=0, artinya fakta selalu berlaku tanpa harus memenuhi
kondisi tertentu, atau

Fact::=Term.

Variabel
Argumen suatu predikat dapat berupa konstanta (atom), variabel, atau obyek lain. Atom
disebut juga sebagai obyek nyata, sedangkan variabel disebut obyek umum. Suatu atom,
variabel, atau obyek lain dalam Prolog disebut term, sehingga argumen selalu berupa
term.
Dalam Prolog terdapat dua variabel, yaitu:
1. Variabel bernama, yaitu variabel yang diberi nama seperti X, Orang, dan sebagainya
2. Variabel tak bernama (placeholder), dilambangkan dengan tanda garis bawah (_).
Setiap term yang ditulis dengan awalan huruf kapital selalu dianggap sebagai variabel
bernama dalam Prolog, sedangkan awalan dengan huruf kecil dianggap sebagai suatu
relasi atau konstanta. Variabel tak bernama digunakan untuk mengabaikan nilai suatu
variabel, yang berarti bisa bernilai apa saja. Berikut adalah contoh penggunaan variabel
bernama dan tidak bernama.
member(X,[X|_]).
member(X,[_|Y]):-member(X,Y).
Di bawah ini disajikan beberapa contoh program Prolog sebagai gambaran awal
pemahaman pemrograman logika:

Contoh
clauses
append([],Y,Y).
append([H|X1],Y,[H|Z1]):-append(X1,Y,Z1).

QUERIES
Query atau pertanyaan digunakan untuk memperoleh jawaban dari suatu problem (secara
deduktif). Dalam notasi EBNF, query didefinisikan sebagai:
Query::=Term {Term}
sedangkan dalam Prolog, query dinyatakan dalam goal. Ada dua jenis goal, yaitu internal
yang dituliskan langsung di dalam tubuh program, sedangkan goal eksternal dituliskan di
luar program dan diberikan pada saat program dijalankan. Berikut ini beberapa contoh
goal:
Contoh 1 (goal internal)
father(Bapak,Chris), write(Bapak)
grandfather(Kakek,Chris), write(kakek)
Contoh 2 (goal internal 2)
append([a,b],[c,d],Z), write(Z), [a,b,c,d]
append(X,[c,d],[a,b,c,d]),write(X)
append([a,b],Y,[a,b,c,d]),write(Y)

Monday 9 June 2014

KBP pert 12



Functional Programming
Functional programming adalah Program serba fungsi, yang artinya setiap persoalan diselesaikan dengan menggunakan fungsi.
Functional programming sendiri mulai dikembangkan tahun 1960an, dimotivasi oleh peneliti bidang artificial intelligence, symbolic computation, theorem proving, rule-based system, dan NLP.
Bahasa fungsional pertama adalah Lisp (McCarthy, 1960).
Memodelkan masalah komputasi sebagai suatu fungsi matematika, yang mempunyai input (domain) dan hasil atau output (range).

LISP Interpretation
Notasi lambda digunakan untuk menentukan fungsi dan definisi fungsi.
Ekspresi disusun dalam notasi Cambridge-prefix.
Contoh: (+ 3 2) maka akan menghasilkan nilai 5
Operasi aritmatika:
(+)à0
(+ 5)à5
(+ 5 4 3 2 1)à15        // maksud nya 5+4+3+2+1 = 15
(*)à1
(*5)à5
(* 1 2 3 4 5)à120       // maksud nya 1*2*3*4*5 = 120
Contoh lain: (+ (* 5 4) (− 6 2) //maka akan menghasilkan (5 * 4) + (6 − 2) = 24

Variabel global
Didefinisikan dengan menggunakan fungsi define.
Contoh: (define f 120)
Evaluasi ekspresi
fà120
(+ f 5)à 125
(f)àerror, karena memiliki kurung tapi tidak melakukan sebuah operasi
5 à5
#fàfalse
#tàtrue

Special Form Function : DEFINE
(define warna (quote (merah kuning hijau)))
(define warna ’(merah kuning hijau))
(define x f)                              120
(define x ’f)                             x berisi simbol f
(define warna ’ merah)
(define warna merah)              error, karena merah bukanlah suatu variable yang memiliki suatu isi

Evaluasi proses dari DEFINE berbeda, parameter pertama tidak akan di evaluasi. Paramete kedua akan di evaluasi, dan terikat pada parameter pertama.

Output Tools
Biasa nya tidak dibutuhkan, karena interpreter selalu menampilkan hasil dari fungsi yang di evaluasi pada top level (tidak nested).
Explicit input dan output bukan bagian dari fungsional programming model murni, karena input operasi merubah kondisi program dan output operasi  adalah side effects.
PLT Scheme memiliki dua tools utama
-          MzScheme : the core compiler, interpreter, and run-time system
-          DrScheme : the programming environment
DrScheme memiliki beberapa variant. Untuk menggunakan Scheme
standar:
Pilih Module (Choose Language— Module)
Definisikan #lang scheme pada definition area.

Tail Reculsion
Operasi disebut tail recursion jika di panggil reculsive dan pada akhir dari fungsi operasi. Fungsi Tail reculsive dapat di convert secara otomatis oleh compiler untuk iterasi dengan membuat nya cepat.
Scheme language definisi membutuhkan konversi scheme language system all tail reculsive fungsi untuk menggunakan iterasi.