LISP - 数字谓词
Lisp - 数值谓词
Section titled “Lisp - 数值谓词”数值谓词是用于测试数字是否具有特定属性并返回布尔值(T 表示真,nil 表示假)的函数。它们是任何 Lisp 程序中逻辑和控制流的基本组成部分。
以下是最常见的数值谓词:
| Predicate | Description |
|---|---|
evenp number | 如果 number 是偶数整数,则返回 T,否则返回 nil。 |
oddp number | 如果 number 是奇数整数,则返回 T,否则返回 nil。 |
zerop number | 如果 number 是零,则返回 T,否则返回 nil。适用于整数和浮点数。 |
plusp number | 如果 number 是严格正数 (> 0),则返回 T,否则返回 nil。 |
minusp number | 如果 number 是严格负数 (< 0),则返回 T,否则返回 nil。 |
示例:使用核心数值谓词
Section titled “示例:使用核心数值谓词”以下代码演示了每个谓词的实际应用。注释显示了在 REPL 中会看到的预期返回值。
main.lisp
Section titled “main.lisp”;; --- evenp 和 oddp ---(evenp 10) ; => T(evenp 7) ; => NIL(oddp 7) ; => T(oddp 10) ; => NIL
;; --- zerop ---(zerop 0) ; => T(zerop 0.0) ; => T(zerop 100) ; => NIL
;; --- plusp ---(plusp 55) ; => T(plusp 0.1) ; => T(plusp 0) ; => NIL(plusp -5) ; => NIL
;; --- minusp ---(minusp -99) ; => T(minusp -0.5) ; => T(minusp 0) ; => NIL(minusp 99) ; => NIL实际应用:控制流
Section titled “实际应用:控制流”谓词最常用于使用 if 和 cond 等条件语句来控制程序的流程。
main.lisp
Section titled “main.lisp”(defun describe-number (n) (cond ((zerop n) "The number is zero.") ((minusp n) "The number is negative.") ((plusp n) (if (evenp n) "The number is positive and even." "The number is positive and odd.")) (t "This is not a real number."))) ; 备用情况
(print (describe-number -10))(print (describe-number 7))(print (describe-number 0))"The number is negative.""The number is positive and odd.""The number is zero."超越基础:类型和比较谓词
Section titled “超越基础:类型和比较谓词”虽然上述函数检查的是属性,但另一类重要的谓词是检查类型和相等性。
- 类型谓词:
numberp、integerp、floatp和rationalp检查对象是否为特定数值类型。 - 比较谓词:函数
=、/=、<、>、<=和>=也是谓词。它们用于数值比较,可以接受多个参数。例如,(< 1 5 10)返回T,因为 1 小于 5,且 5 小于 10。
(numberp 10) ; => T(floatp 3.14) ; => T(integerp 3.14) ; => NIL
(= 5 5 5) ; => T(/= 5 6 7) ; => T (all are different from each other)(<= 1 2 2 3) ; => T