参见示例:https://github.com/vindarel/cl-str#empty-emptyp-s
或者这个:https://stackoverflow.com/a/33379360/12400477
我在好几个地方看到过这个,但不知道什么意思。
p
后缀是否表示函数返回的类型?它总是意味着它返回一个布尔值吗?为什么第一个例子中同一个功能似乎有两个替代符号?
对于 Common Lisp 有一堆命名约定。添加
p
或 -p
用于返回真值的函数。
这并不意味着该函数将仅返回
t
或 nil
。 true 的其他值也是可能的:
对于
true,将返回与
t
不同的值的谓词示例。
CL-USER 1 > (digit-char-p #\a)
NIL
CL-USER 2 > (digit-char-p #\1)
1 ; any object other than nil
; also means *true*
使用
?
的约定来自于 Scheme 编程语言。
它代表谓词,即带有是或否答案的函数。示例:integerp(它是整数吗?)、realp、有理数p等..
扩展名“p”代表“谓词”。谓词是返回 true 或 false 布尔结果的测试。谓词的概念适用于大多数(如果不是所有)语言。
一个例子是参数 x 的“零谓词”,如果 x 为零则返回 true,如果不为零则返回 false。
风格因语言而异,并且还取决于谓词名称。 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
因为还没人说清楚,所以我想补充一下: 如果要附加
-p
的符号已包含一个或多个 p
,则可以使用 -
。如果没有,您只需附加 p
而不使用连字符。
所以
one-word
会变成 one-word-p
,但是 blue
会变成 bluep
。
p 代表“谓词”,Lisp Hyperspec 表示:
谓语 n.返回广义布尔值作为其第一个值的函数。
广义布尔值 n。用作真值的对象,其中符号 nil 代表 false,所有其他对象 代表 true。请参阅布尔值。
布尔值 n。布尔类型的对象;即以下对象之一:符号 t(代表 true),或符号 nil(代表 false)。请参阅广义布尔值。
如果函数返回 nil 或 T I(其他人使用 ? 而不是 p)。