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 和合适的格式字符串来打印结果。