190 likes | 407 Views
Bab 6. Predikat Lisp. 6.5. Predikat. Predikat – prosedur yang mengembalikan nilai sama ada BENAR atau PALSU Terdapat beberapa jenis predikat: Predikat Kesamaan Predikat Keahlian Predikat Jenis Data Predikat Senarai-kosong Predikat Nombor. 6.5.1. Predikat Kesamaan.
E N D
Bab 6 Predikat Lisp
6.5. Predikat • Predikat – prosedur yang mengembalikan nilai sama ada BENAR atau PALSU • Terdapat beberapa jenis predikat: • Predikat Kesamaan • Predikat Keahlian • Predikat Jenis Data • Predikat Senarai-kosong • Predikat Nombor
6.5.1. Predikat Kesamaan • Terdapat 4 predikat kesamaan: • EQUAL – adakah kedua-dua argumen ungkapan (senarai atau atom) yang sama ? • EQL – adakah kedua-dua argumen simbol atau nombor yang sama? • EQ – adakah kedua-dua argumen simbol yang sama? • = - adakah kedua-dua argumen nombor yang sama?
6.5.1. Predikat Kesamaan - Contoh > setf abc-list ‘(a b c) one 1 two 2 plus ‘+ minus ‘-) > (equal abc-list ‘(a b c)) T > (equal one 2) NIL > (equal abc-list one) NIL > (equal plus minus) NIL > (eql plus ‘+) T > (eq minus –1) ERROR > (= 4 4.0) T
6.5.2. Predikat Keahlian • Predikat keahlian (MEMBER) menguji sama ada argumen pertama adalah unsur (paras teratas) bagi argumen kedua • Hanya boleh menguji sekiranya argumen pertama adalah berbentuk simbolik • MEMBER mengembalikan senarai yang tinggal selepas padanan dijumpai • Contoh: > (MEMBER ‘MOTHER ‘(tell me about your mother please) (MOTHER PLEASE) > (MEMBER ‘MOTHER ‘((FATHER SON) (MOTHER DAUGHTER))) NIL
6.5.3. Predikat Jenis Data • Menyemak jenis data dalam ungkapan: • ATOM – adakah unsur sejenis atom? • NUMBERP – adakah unsur sejenis nombor? • SYMBOLP – adakah unsur sejenis simbol? • LISTP – adakah unsur sejenis senarai? • Contoh: eval> (atom ‘pi) T eval> (symbolp pi) NIL
6.5.4. Predikat Senarai-Kosong • Menyemak sama ada senarai adalah kosong • Dua predikat yang boleh digunakan: • NULL – Adakah argumen suatu senarai kosong? • ENDP – Adakah argumen (senarai) suatu senarai kosong? • Contoh: > (null ()) T > (endp nil) T > (null ‘(a b c)) NIL
6.5.5. Predikat Nombor • Menyemak nombor dalam ungkapan: • NUMBERP – Adakah argumen suatu nombor? • ZEROP – Adakah argumen suatu sifar? • PLUSP – Adakah argumen nombor positif? • MINUSP – Adakah argumen nombor negatif? • EVENP – Adakah argumen nombor genap? • ODDP – Adakah argumen nombor ganjil? • > - Adakah nombor dalam susunan menurun? • < - Adakah nombor dalam susunan menaik?
6.5.5. Predikat Nombor - Contoh > (setf zero 0 one 1 two 2 three 3 four 4) . . . > (setf digits (list one two three four)) . . . > (numberp 4) T > (numberp four) T > (numberp ‘four) NIL > (evenp (* 9 5 3 2 1)) T > (> four two) T
6.6. Gabungan Predikat • Predikat boleh digabungkan menggunakan: • AND • OR • NOT
6.6.1. Gabungan Predikat - AND • Gabungan predikat menggunakan AND mengembalikan: • NIL sekiranya sebarang argumennya dinilai sebagai NIL (argumen dinilai dari kiri-ke-kanan dan menggunakan konsep ‘litar-pintas’), • Argumen terakhir sekiranya kesemua argumen tidak bernilai NIL • Bilangan argumen yang boleh digunakan tidak terhad • Contoh: > (setf pets ‘(dog cat)) . . . > (and (member ‘dog pets) (member ‘tiger pets)) NIL > (and (member ‘dog pets) (member ‘cat pets)) (CAT)
6.6.2. Gabungan Predikat - OR • Gabungan predikat menggunakan OR mengembalikan: • NIL sekiranya kesemua argumennya dinilai sebagai NIL, • Nilai bukan-NIL yang dijumpai • Bilangan argumen yang boleh digunakan tidak terhad • Contoh: > (setf pets ‘(dog cat)) . . . > (or (member ‘dingo pets) (member ‘tiger pets)) NIL > (or (member ‘dog pets) (member ‘cat pets)) (DOG CAT)
6.6.3. Gabungan Predikat - NOT • NOT menukarkan: • Bukan-NIL kepada NIL, • NIL kepada T (benar) • Contoh: > (not ‘(dog)) NIL > (setf pets ‘(dog cat)) (DOG CAT) > (not (member ‘dog pets)) NIL > (not (member ‘tiger pets)) T
6.7. Primitif Percabangan • Terdapat 5 jenis percabangan: • IF • WHEN • UNLESS • COND • CASE
6.7.1. Percabangan IF • Sintaks percabangan IF: (IF <test> <then form> <else from>) • IF mengembalikan nilai <then form> sekiranya nilai <test> adalah T(benar) atau sebarang nilai selain dari NIL • IF mengembalikan nilai <else form> sekiranya nilai <test> adalah NIL • Contoh: > (setf day-or-date ‘Monday) . . . > (if (symbolp day-or-date) ‘day ‘date) DAY > (setf day-or-date 9) . . . > (if (symbolp day-or-date) ‘day ‘date) DATE
6.7.2. Percabangan WHEN • Sintaks percabangan WHEN: (WHEN <test> <then form>) • WHEN mengembalikan nilai <then form> sekiranya nilai <test> adalah sebarang nilai selain dari NIL • Contoh: > (when t ‘its-true) ITS-TRUE > (when NIL ‘its-true) NIL > (setf high 98 temperature 102) . . . > (when (> temperature high) (setf high temperature)) 102 > high 102
6.7.3. Percabangan UNLESS • Sintaks percabangan UNLESS: (UNLESS <test> <else form>) • UNLESS mengembalikan nilai <else form> sekiranya nilai <test> adalah NIL • UNLESS mengembalikan NIL sekiranya nilai <test> adalah sebarang nilai bukan-NIL • Contoh: > (unless NIL ‘its-false) ITS-FALSE > (unless T ‘its-false) NIL > (setf high 98 temperature 102) . . . > (unless (< temperature high) (setf high temperature)) 102 > high 102
6.7.4. Percabangan COND • Sintaks percabangan COND: (COND (<test 1> <consequent 1-1> <consequent 1-2> ..) (<test 2> <consequent 2-1> <consequent 2-2> ..) .. (<test m> <consequent m-1> <consequent m-2> ..)) • Klausa dalam ungkapan COND dinilai satu demi satu sehingga suatu nilai bukan-NIL dijumpai • Contoh: > (cond ((= N 0) (setf answer ‘(value is zero))) ((> N 1) (setf answer ‘(value is positive))) (T (setf answer ‘(value is negative))))
6.7.5. Percabangan CASE • Sintaks: (CASE <key form> (<key 1> <consequent 1-1> <consequent 1-2> . . ) (<key 2> <consequent 2-1> <consequent 2-2> . . ) . . . (<key m> <consequent m-1> <consequent m-2> . . ) • Contoh: > (setf thing ‘point r l) . . . > (case thing (circle (* pi r)) (sphere (* 4 pi r r)) (otherwise 0)) 0