LISP - Predicates
เพรดิเคตคือฟังก์ชันที่ทดสอบอาร์กิวเมนต์สำหรับเงื่อนไขบางอย่างและส่งกลับค่าศูนย์หากเงื่อนไขเป็นเท็จหรือค่าที่ไม่ใช่ศูนย์บางค่าเป็นเงื่อนไขที่เป็นจริง
ตารางต่อไปนี้แสดงเพรดิเคตที่ใช้บ่อยที่สุด -
ซีเนียร์ | เพรดิเคตและคำอธิบาย |
---|---|
1 | atom ใช้เวลาหนึ่งอาร์กิวเมนต์และส่งกลับ t ถ้าอาร์กิวเมนต์เป็นอะตอมหรือศูนย์ถ้าเป็นอย่างอื่น |
2 | equal ต้องใช้สองอาร์กิวเมนต์และผลตอบแทน t ถ้ามีโครงสร้างเท่ากันหรือ nil มิฉะนั้น. |
3 | eq ต้องใช้สองอาร์กิวเมนต์และผลตอบแทน t หากเป็นวัตถุที่เหมือนกันให้แชร์ตำแหน่งหน่วยความจำเดียวกันหรือ nil มิฉะนั้น. |
4 | eql ต้องใช้สองอาร์กิวเมนต์และผลตอบแทน t ถ้าอาร์กิวเมนต์เป็น eqหรือถ้าเป็นตัวเลขประเภทเดียวกันที่มีค่าเดียวกันหรือเป็นวัตถุอักขระที่แสดงอักขระเดียวกันหรือ nil มิฉะนั้น. |
5 | evenp ใช้อาร์กิวเมนต์ตัวเลขหนึ่งรายการและส่งกลับ t ถ้าอาร์กิวเมนต์เป็นเลขคู่หรือ nil ถ้าเป็นอย่างอื่น |
6 | oddp ใช้อาร์กิวเมนต์ตัวเลขหนึ่งรายการและส่งกลับ t ถ้าอาร์กิวเมนต์เป็นเลขคี่หรือ nil ถ้าเป็นอย่างอื่น |
7 | zerop ใช้อาร์กิวเมนต์ตัวเลขหนึ่งรายการและส่งกลับ t ถ้าอาร์กิวเมนต์เป็นศูนย์หรือ nil ถ้าเป็นอย่างอื่น |
8 | null ใช้เวลาหนึ่งอาร์กิวเมนต์และส่งกลับ t หากอาร์กิวเมนต์ประเมินเป็นศูนย์มิฉะนั้นจะส่งกลับ nil. |
9 | listp ใช้เวลาหนึ่งอาร์กิวเมนต์และส่งกลับ t หากอาร์กิวเมนต์ประเมินเป็นรายการมิฉะนั้นจะส่งกลับ nil. |
10 | greaterp ใช้เวลาอย่างน้อยหนึ่งอาร์กิวเมนต์และส่งกลับ t หากมีอาร์กิวเมนต์เดียวหรืออาร์กิวเมนต์มีขนาดใหญ่ขึ้นตามลำดับจากซ้ายไปขวาหรือ nil ถ้าเป็นอย่างอื่น |
11 | lessp ใช้เวลาอย่างน้อยหนึ่งอาร์กิวเมนต์และส่งกลับ t หากมีอาร์กิวเมนต์เดียวหรืออาร์กิวเมนต์มีขนาดเล็กลงเรื่อย ๆ จากซ้ายไปขวาหรือ nil ถ้าเป็นอย่างอื่น |
12 | numberp ใช้เวลาหนึ่งอาร์กิวเมนต์และส่งกลับ t ถ้าอาร์กิวเมนต์เป็นตัวเลขหรือ nil ถ้าเป็นอย่างอื่น |
13 | symbolp ใช้เวลาหนึ่งอาร์กิวเมนต์และส่งกลับ t ถ้าอาร์กิวเมนต์เป็นสัญลักษณ์มิฉะนั้นจะส่งกลับ nil. |
14 | integerp ใช้เวลาหนึ่งอาร์กิวเมนต์และส่งกลับ t ถ้าอาร์กิวเมนต์เป็นจำนวนเต็มมิฉะนั้นจะส่งกลับ nil. |
15 | rationalp ใช้เวลาหนึ่งอาร์กิวเมนต์และส่งกลับ t ถ้าอาร์กิวเมนต์เป็นจำนวนตรรกยะไม่ว่าจะเป็นอัตราส่วนหรือตัวเลขมิฉะนั้นจะส่งกลับ nil. |
16 | floatp ใช้เวลาหนึ่งอาร์กิวเมนต์และส่งกลับ t ถ้าอาร์กิวเมนต์เป็นตัวเลขทศนิยมมิฉะนั้นจะส่งกลับ nil. |
17 | realp ใช้เวลาหนึ่งอาร์กิวเมนต์และส่งกลับ t ถ้าอาร์กิวเมนต์เป็นจำนวนจริงมิฉะนั้นจะส่งกลับ nil. |
18 | complexp ใช้เวลาหนึ่งอาร์กิวเมนต์และส่งกลับ t ถ้าอาร์กิวเมนต์เป็นจำนวนเชิงซ้อนมิฉะนั้นจะส่งกลับ nil. |
19 | characterp ใช้เวลาหนึ่งอาร์กิวเมนต์และส่งกลับ t ถ้าอาร์กิวเมนต์เป็นอักขระมิฉะนั้นจะส่งกลับ nil. |
20 | stringp ใช้เวลาหนึ่งอาร์กิวเมนต์และส่งกลับ t ถ้าอาร์กิวเมนต์เป็นวัตถุสตริงมิฉะนั้นจะส่งกลับ nil. |
21 | arrayp ใช้เวลาหนึ่งอาร์กิวเมนต์และส่งกลับ t ถ้าอาร์กิวเมนต์เป็นวัตถุอาร์เรย์มิฉะนั้นจะส่งกลับ nil. |
22 | packagep ใช้เวลาหนึ่งอาร์กิวเมนต์และส่งกลับ t หากอาร์กิวเมนต์เป็นแพ็กเกจมิฉะนั้นจะส่งกลับ nil. |
ตัวอย่าง 1
สร้างไฟล์ซอร์สโค้ดใหม่ชื่อ main.lisp และพิมพ์รหัสต่อไปนี้
(write (atom 'abcd))
(terpri)
(write (equal 'a 'b))
(terpri)
(write (evenp 10))
(terpri)
(write (evenp 7 ))
(terpri)
(write (oddp 7 ))
(terpri)
(write (zerop 0.0000000001))
(terpri)
(write (eq 3 3.0 ))
(terpri)
(write (equal 3 3.0 ))
(terpri)
(write (null nil ))
เมื่อคุณรันโค้ดจะส่งคืนผลลัพธ์ต่อไปนี้ -
T
NIL
T
NIL
T
NIL
NIL
NIL
T
ตัวอย่าง 2
สร้างไฟล์ซอร์สโค้ดใหม่ชื่อ main.lisp และพิมพ์รหัสต่อไปนี้
(defun factorial (num)
(cond ((zerop num) 1)
(t ( * num (factorial (- num 1))))
)
)
(setq n 6)
(format t "~% Factorial ~d is: ~d" n (factorial n))
เมื่อคุณรันโค้ดจะส่งคืนผลลัพธ์ต่อไปนี้ -
Factorial 6 is: 720