我想比较用户输入READ和字符串,如下所示:
CL-USER 36 > (equalp (read) "same")
same
NIL
Run Code Online (Sandbox Code Playgroud)
但是,正如您所看到的,即使我键入"相同",也EQUALP表示我的输入和字符串不同.我该如何比较这两个?
你可以使用read-line这个:
CL-USER> (equalp (read-line) "same")
same
T
Run Code Online (Sandbox Code Playgroud)
read 会返回一个符号:
CL-USER> (type-of (read))
same
SYMBOL
Run Code Online (Sandbox Code Playgroud)
来自Hyperspec:
read从输入流解析对象的打印表示并构建这样的对象.
您只想读取一个字符串,而read 解析输入并从中构造Lisp对象.
要获取字符串read,您必须使用字符串的"打印表示",即将它们放在双引号中:
CL-USER> (equalp (read) "same")
"same"
T
Run Code Online (Sandbox Code Playgroud)
(顺便说一句:有string=字符串比较; equalp会忽略大小写.)