后缀 "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 仅 t
或 nil
。 true 的其他值也是可能的:
谓词示例,它将 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
。
参见示例: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 仅 t
或 nil
。 true 的其他值也是可能的:
谓词示例,它将 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
。