How to read user input in Lisp
I am very new to Lisp and am trying to write a program that simply asks the user to enter 3 numbers and then sums them up and outputs the result.
I read that you can use a function like:
(defvar a)
(setq a (read))
To set a variable in Lisp, but when I try to compile my code with LispWorks, I get the following error:
End of file while reading stream #<Concatenated Stream, Streams = ()>
It seems to me that this should be relatively simple and have no idea where I am going wrong.
source to share
I haven't worked with LispWorks, so this is just a guess.
When the compiler traverses your code, it hits a line (setq a (read))
, it tries to read the input, but there is no input stream at compile time, so you get an error.
Write a function:
(defvar a)
(defun my-function ()
(setq a (read))
It should work.
source to share
This should evaluate correctly in Lisp:
(defun read-3-numbers-&-format-sum ()
(flet ((prompt (string)
(format t "~&~a: " string)
(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)))))
Just evaluate the above function definition, then run the form:
(read-3-numbers-&-format-sum)
in the LispWorks interpreter.
source to share