6

私は Lisp に非常に慣れていないので、ユーザーに 3 つの数字を入力するように単純に要求し、それらを合計して出力を出力するプログラムを作成しようとしています。

次のような関数を使用できることを読みました。

(defvar a)

(setq a (read))

Lisp で変数を設定するには、LispWorks を使用してコードをコンパイルしようとすると、次のエラーが発生します。

End of file while reading stream #<Concatenated Stream, Streams = ()>

これは比較的単純なはずで、どこが間違っているのかわかりません。

4

2 に答える 2

6

私は LispWorks を使ったことがないので、推測にすぎません。

コンパイラがコードをトラバースすると、行(setq a (read))に到達し、入力を読み取ろうとしますが、コンパイル中に入力ストリームがないため、エラーが発生します。

関数を書く:

(defvar a)

(defun my-function ()
  (setq a (read))

それはうまくいくはずです。

于 2014-10-03T04:57:50.167 に答える
5

これは 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 インタプリタで。

于 2014-10-03T18:45:52.857 に答える