Common Lisp (sbcl) 中的奇怪(阅读)问题
Odd (read) issue in Common Lisp (sbcl)
我有以下代码:
(defun Areacircle ()
(princ "Enter Radius: ")
(defparameter radius (read))
(defparameter area (* 3.1416 radius radius))
(princ "Area: ")
(write area))
(AreaCircle)
问题是,slime 运行它没有问题,但是当我用 (compile-file "area.lisp" :output-file "area") 编译它时,它首先评估 (read) 部分;它要求在打印任何内容之前将值传递给半径。
您的代码中没有任何内容强制将(缓冲的)输出发送到终端。添加对 (force-output)
或 (finish-output)
的调用会有所帮助。
此外,您在应该使用 let
的地方使用了 defparameter
。您最好使用 pi
而不是近似值,并使用 format
和合适的格式字符串来打印结果。
我有以下代码:
(defun Areacircle ()
(princ "Enter Radius: ")
(defparameter radius (read))
(defparameter area (* 3.1416 radius radius))
(princ "Area: ")
(write area))
(AreaCircle)
问题是,slime 运行它没有问题,但是当我用 (compile-file "area.lisp" :output-file "area") 编译它时,它首先评估 (read) 部分;它要求在打印任何内容之前将值传递给半径。
您的代码中没有任何内容强制将(缓冲的)输出发送到终端。添加对 (force-output)
或 (finish-output)
的调用会有所帮助。
此外,您在应该使用 let
的地方使用了 defparameter
。您最好使用 pi
而不是近似值,并使用 format
和合适的格式字符串来打印结果。