gpt4 book ai didi

lisp - 在 lisp 中实现 equal 和 equals 的麻烦

转载 作者:太空宇宙 更新时间:2023-11-03 18:58:20 25 4
gpt4 key购买 nike

下面是我的示例代码:

(defvar answer 0)
(defvar response "")
(defun question ()
(write-line "Enter your question")
(setq response (read-line))
(if (eql (subseq response 0 2) 'Is)
(print "T")
(print "nil")
))

基本前提是确定所问问题是否以单词 is 开头。我认为给我带来问题的那一行是 (if (eql (subseq response 0 2) 'Is)。我还有其他使用 eql 的程序,但出于某种原因,无论输入如何,这种使用总是返回 false。我已经花了 3 个小时尝试此代码的几个不同变体,但没有一个起作用。任何帮助将不胜感激。

最佳答案

你可能想要的是

(string-equal (subseq response 0 2) 'Is)

string-equal 比较忽略字符大小写的字符串。与 string-equal 不同,string= 函数比较字符串时考虑字符大小写。使用 string= 函数的等价物是

(string= (string-upcase (subseq response 0 2)) 'Is)

与字符串比较谓词相反,eql 谓词比较 lisp 对象。对于编译代码中的相等常量字符串,它可能会返回 true 而在您的情况下,一个对象被引用文字而另一个对象是计算字符串,它会失败。

例如 (eql 'is 'is) 返回 true(eql "is""is") 返回 false 在解释代码中。

关于lisp - 在 lisp 中实现 equal 和 equals 的麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49344424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com