【发布时间】:2021-02-24 12:36:12
【问题描述】:
我应该编写一个程序,将简单的用户输入作为字符串获取,并且代码应该写回响应(姓名,你是不是一个人等)。该程序假设在输入单词“再见”时终止。代码如下:
(defun x()
(setq words "empty")
(loop while (string/= words "BYE")
(setq words (read-delimited-list #\~)
(write-line words)
(format t "ROBBIE%: Hello, who are you?")
(case (string-include "I'm" words)
(format t "ROBBIE%: Nice to see you, how are you?")
((string-include "Hi" words)
(format t "ROBBIE%: How are you?")
(or (string-include "fine" words) (string-include "person" words))
(format t "ROBBIE%: No I'm a computer")))
(format t "BYE"))
(x)
但是,当我在程序 2 上编译此错误时:
Line2:3 警告:未定义变量:COMMON-LISP-USER::WORDS
Line3:3 错误:在 (LOOP WHILE (STRING/= WORDS "BYE") ...) 的宏展开期间。使用BREAK-ON-SIGNALS进行拦截。
我已经在 python 中完成了编程,但这对我来说是非常复杂的语言,我需要一些帮助来理解为什么这不起作用?非常感谢任何建议!
【问题讨论】:
-
上面的代码有不平衡的括号,并且没有正确缩进。你能先解决这些问题吗?
-
对此我深表歉意。现在应该正确缩进。括号非常混乱,还在学习中。
-
括号可以(并且应该)在编辑器的帮助下进行跟踪,例如github.com/susam/emacs4cl 的详细解释;在开箱即用的 Emacs 中突出显示匹配的括号,这已经比在文本编辑器(记事本等)中编写更好。
-
另外我鼓励你先编写小的表达式或函数,在 REPL 中测试它们,只有当你对程序中发生的事情感到满意时,才能构建更大的函数。否则,您可能需要捕获多个错误(如此处)。
标签: lisp common-lisp