common lisp 函数中后缀“p”是什么意思?

问题描述 投票:0回答:5

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

或者这个:https://stackoverflow.com/a/33379360/12400477

我在好几个地方看到过这个,但不知道什么意思。

p
后缀是否表示函数返回的类型?它总是意味着它返回一个布尔值吗?为什么第一个例子中同一个功能似乎有两个替代符号?

common-lisp naming-conventions predicate
5个回答
4
投票

对于 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 编程语言。


2
投票

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


2
投票

扩展名“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

2
投票

因为还没人说清楚,所以我想补充一下: 如果要附加

-p
的符号已包含一个或多个
p
,则可以使用
-
。如果没有,您只需附加
p
而不使用连字符。

所以

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


0
投票

p 代表“谓词”,Lisp Hyperspec 表示:

谓语 n.返回广义布尔值作为其第一个值的函数。

广义布尔值 n。用作真值的对象,其中符号 nil 代表 false,所有其他对象 代表 true。请参阅布尔值。

布尔值 n。布尔类型的对象;即以下对象之一:符号 t(代表 true),或符号 nil(代表 false)。请参阅广义布尔值。

如果函数返回 nil 或 T I(其他人使用 ? 而不是 p)。

© www.soinside.com 2019 - 2024. All rights reserved.