我对 Lisp 很陌生,正在尝试编写一个程序,该程序只要求用户输入 3 个数字,然后将它们相加并打印输出。
我读过您可以使用以下功能:
(defvar a)
(setq a (read))
在 Lisp 中设置一个变量,但是当我尝试使用 LispWorks 编译我的代码时,我收到以下错误:
End of file while reading stream #<Concatenated Stream, Streams = ()>
我觉得这应该相对简单,不知道我哪里出错了。
我对 Lisp 很陌生,正在尝试编写一个程序,该程序只要求用户输入 3 个数字,然后将它们相加并打印输出。
我读过您可以使用以下功能:
(defvar a)
(setq a (read))
在 Lisp 中设置一个变量,但是当我尝试使用 LispWorks 编译我的代码时,我收到以下错误:
End of file while reading stream #<Concatenated Stream, Streams = ()>
我觉得这应该相对简单,不知道我哪里出错了。
我没有使用 LispWorks,所以这只是一个猜测。
当编译器遍历您的代码时(setq a (read))
,它会尝试读取输入,但编译时没有输入流,因此您会收到错误。
写一个函数:
(defvar a)
(defun my-function ()
(setq a (read))
它应该工作。
这应该在您的 Lisp 中正确评估:
(defun read-3-numbers-&-format-sum ()
(flet ((prompt (string)
(format t "~&~a: " string)
(finish-output)
(read nil 'eof nil)))
(let ((x (prompt "first number"))
(y (prompt "second number"))
(z (prompt "third number")))
(format t "~&the sum of ~a, ~a, & ~a is:~%~%~a~%"
x y z (+ x y z)))))
简单地评估上面的函数定义,然后运行表单:
(read-3-numbers-&-format-sum)
在你的 LispWorks 解释器上。