后缀 "p" 在常见的 lisp 函数中是什么意思?

What does suffix "p" mean in common lisp functions?

参见示例:https://github.com/vindarel/cl-str#empty-emptyp-s

或者这样:

在好几个地方看到过,不知道是什么意思。 p后缀是否表示函数returns的类型?它总是意味着它 returns 是一个布尔值吗?为什么在第一个示例中似乎有两个替代符号用于相同的功能?

它代表谓词,即带有是或否答案的函数。示例:integerp(是整数吗?)、realp、rationalp等。

扩展名 'p' 代表 'predicate'。谓词是 returns 布尔结果为真或假的测试。谓词的概念适用于大多数(如果不是所有的话)语言。

一个例子是参数 x 的 'zero predicate',如果 x 为零,则 returns 为真,如果不为零,则为假。

风格因语言而异,也取决于谓词名称。 Clojure 的风格是加问号。 Common Lisp 的风格通常是在名称中添加 'p'。当添加“-p”时,Common Lisp 对包含连字符的谓词名称有一个例外。第一个例子似乎想做两种风格,“?” 'p',取决于用户习惯的风格。

谓词的编码涉及进行测试并返回结果而不是对其进行操作。

Python:

def zerop (x):
   return x == 0

# zerop (0) => True
# zerop (1) => False

Common Lisp:

(defun my-zero-p (x)
   (= x 0))

; (my-zero-p 0) => t
; (my-zero-p 1) => nil

对于 Common Lisp,有一堆 naming conventions。添加 p-p 用于 return 真值的函数。

这并不意味着该函数将 return 仅 tniltrue 的其他值也是可能的:

谓词示例,它将 return 与 t 不同的值 true

CL-USER 1 > (digit-char-p #\a)
NIL

CL-USER 2 > (digit-char-p #)
1                              ; any object other than nil
                               ; also means *true*

使用 ? 的约定来自 Scheme 编程语言。

因为还没有人说清楚,所以想补充一下: 如果要附加 p 的符号已经包含一个或多个 -,则使用 -p。如果没有,您只需附加 p 即可,不带连字符。

所以 one-word 会变成 one-word-p,但是 blue 会变成 bluep