为什么这样:
(every (lambda (x) (equal "a" x)) "aaaaa")
还有这个:
(every (lambda (x) (equal "a" x)) "a")
返回 NIL ,同时:
NIL
(every (lambda (x) (equal "a" x)) '("a" "a" "a" "a"))
返回 T ?我认为 every 适用于所有序列 .
T
every
你总能找到它自己 . 如果您使用交互式Lisp系统,测试只需几秒钟:
CL-USER 1 > (every (lambda (x) (equal "a" x)) "a") NIL
以上返回NIL .
现在使用Common Lisp函数 DESCRIBE 来获取所描述的数据 .
DESCRIBE
CL-USER 2 > (every (lambda (x) (describe x) (describe "a") (equal "a" x)) "a") #\a is a CHARACTER Name "Latin-Small-Letter-A" Code 97 Bits 0 Font 0 Function-Key-P NIL
所以 x 的值是一个字符 . 字符 #\a .
x
#\a
"a" is a SIMPLE-BASE-STRING 0 #\a NIL
"a"的类型是 SIMPLE-BASE-STRING (这里是LispWorks) .
SIMPLE-BASE-STRING
如果你看一下 EQUAL 的定义,那么你可以看到一个字符和一个字符串永远不会相等,因为它们的类型不同 .
EQUAL
CL-USER 3 > (equal #\a "a") NIL
因为在案例1和案例2中,您比较 "a" 和 #\a ,但在最后一种情况下,您比较 "a" 和 "a" . 字符串的元素是字符,而不是其他字符串 .
"a"
例如:
(every (lambda (x) (equal #\a x)) "aaaaa") => T
另一种方法是强制 x 为字符串:
(every (lambda (x) (equal "a" (string x))) "aaaaa")
2 回答
你总能找到它自己 . 如果您使用交互式Lisp系统,测试只需几秒钟:
以上返回NIL .
现在使用Common Lisp函数
DESCRIBE
来获取所描述的数据 .所以
x
的值是一个字符 . 字符#\a
."a"的类型是
SIMPLE-BASE-STRING
(这里是LispWorks) .如果你看一下
EQUAL
的定义,那么你可以看到一个字符和一个字符串永远不会相等,因为它们的类型不同 .因为在案例1和案例2中,您比较
"a"
和#\a
,但在最后一种情况下,您比较"a"
和"a"
. 字符串的元素是字符,而不是其他字符串 .例如:
另一种方法是强制
x
为字符串: