所以我在下面有我的示例代码:
(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")
))
基本前提是确定问题是否以“是”开头。 我认为给我带来问题的那一行是(如果(eql(subseq response 0 2)'是)。我有其他使用eql的程序,但由于某种原因,无论输入如何,这种用法总是返回false。我已经花了3个小时尝试了这段代码的几个不同变体,但没有一个有效。任何帮助都会非常感激。
答案 0 :(得分:2)
你可能想要的是
(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 。