Matakuliah Tahun Versi : H0383/Sistem Berbasis Pengetahuan : 2005 : 1/0 Pertemuan 4 Bahasa Pemrograman Logika 1 Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu : • Mendemonstrasikan bahasa pemrograman untuk implementasi predicate logic 2 Outline Materi • LISP • PROLOG 3 Bahasa LISP • LISP menggunakan notasi prefix – (+ 5 6 9) –5+6+9 – Contoh: konversi 50 Celcius Fahrenheit: – (+(*(/ 9 5) 50) 32) • List dalam LISP – (a b (c d) e f) adalah list – (c d) adalah sublist – c, d adalah top element dari sublist 4 Bahasa LISP • List kosong = NIL • Variable assignment: – (setq x 10) artinya x = 10 – (setq x (+ 3 5)) == x=3+5 • Basic list manipulation function – (car’(a b c)) = a – (cdr’(a b c)) = (b c) – (cons’a’(b c)) = (a b c) – (list ’a ’(bc)) = (a (b c)) 5 Bahasa LISP • Function call: – (function-name arg1 arg2 …) • Additional manipulation list – (append ’(a) ’(b c)) = (a b c) – (last ’(a b c d)) = (d) – (member ’b ’(a b d) = (b d) – (reserve ’(a (b c) d)) = (d (b c) a) 6 Bahasa LISP • Defining function – (defun name(parm1, parm2 …) body) – Defun averagethree (n1 n2 n3) (/ (+ n1 n2 n3) 3)) – (averagethree 10 20 30) = 20 7 Bahasa LISP • Predicate call: – (atom ‘aabb) = true; aabb is a valid atom – (equal ‘a (car ‘(a b)) = true; a=a – (greaterp 2 4 27)= true; (lessp 5 3 1 2)= nil – (zerop .000001) = nil; – (evenp 3) = nil; (oddp 3) = true; – (number 10) = true; – (listp ‘(a)) = true; a is a valid list 8 Bahasa Lisp • Conditional: – (cond (<test1> <action1>) (<test2> <action2>) : (<testk> <actionk>) (defun maximum2 (a b) (cod ((>a b) a) (t b))) maximum2(234 320) = 320 9 Bahasa LISP • Logical function: or, and, not, t(true), null • Input: (+5 (read)) • If 6 is inserted by keyboard then result is 11 • Output: print’(a b c) ; print a list 10 Bahasa LISP • Iteration – (do (<var1 val1><var-update1) : (<test> <return-value>) (s-expression) • Contoh : factorial: (defun factorial (n) (do ((count n (- count 1)) (product n (* product (-count 1) ((equal 0 count) product))) 11 Bahasa LISP • Recursive: • (defun factorial (n) (cond (( zerop n) 1) (t (* n (factorial (- n 1))))) 12 Bahasa LISP • Property lists – (putprop object value attribute) – (putprop ’car ’ford ’make) – (putprop ’car ’1988 ’year) – (putprop ’car ’red ’color) – (putprop ’car ’four-door ’style) – (get ‘car ‘make) = Ford – (get ‘car ‘color) = red 13 Bahasa LISP • Arrays – (setf myarray(make-array ’(10))) – (setf (aref myarray 0) 25 – (setf (aref myarray 1) ’red – (aref myarray 0) = 25 – (aref myarray 1) = red 14 Bahasa LISP • Mapping function: – (mapcar ’1 +’(5 10 15 20 25)) = (6 11 16 21 26) – (mapcar ’+ ’(1 2 3 4 5 6) ’(1 2 3 4)) = (2 4 6 8) • Lambda function: – (defun cubic(lists) (mapcar #’(lambda (x) (*x x x)) lists)) – (cubic(1 2 3 4)) = (1 8 27 64) 15 Bahasa PROLOG • PROLOG: PROgramming in Logic – sister(sue,bill) – parent(ann,sam), parent(joe,ann) – male(joe), female(ann) If X is the parent of Y, and Y is the parent of Z, and X is a male, then X is grandfather of Z grandfather(X,Z) :- parent(X,Y), parent(Y,Z),male(X) 16 Bahasa PROLOG • • • • • • • Query: ?- parent(X,sam) X=ann ?- female(joe) No ?-male(joe) yes 17 Bahasa PROLOG • • • • • • List in PROLOG: [tom,sue,joe,marry,bill] ?- [Head|Tail] = [tom,sue,joe,marry] Head = tom, Tail=[sue,joe,marry] List manipulation: append, member, conc, add, delete 18 Bahasa PROLOG • member(X,[X|Tail]) • member(X,[Head|Tail]):-member(X,Tail) • X is a member of the list L if X is the head of L. • X is a member of L if X is a member of the tail of L • ?- member(c,[a,b,c,d])yes • ?- member(b,[a,[b,c],d])No 19 Penutup • Bahasa-bahasa pemrograman logika dapat digunakan untuk implementasi problem berbasis pengetahuan. • Selain LISP dan PROLOG, terdapat berbagai jenis lainnya misal CLIPS. • Meski beragam, namun semantiknya serupa. 20
© Copyright 2026 Paperzz