Compilation 通用Lisp(sbcl)中的奇数(读取)问题

Compilation 通用Lisp(sbcl)中的奇数(读取)问题,compilation,common-lisp,Compilation,Common Lisp,我有以下代码: (defun Areacircle () (princ "Enter Radius: ") (defparameter radius (read)) (defparameter area (* 3.1416 radius radius)) (princ "Area: ") (write area)) (AreaCircle) 问题是,slime运行它时没有问题,但当我使用(编译文件“area.lisp”:输出文件“area”)编译它时,它首先计算(读取)部分

我有以下代码:

(defun Areacircle ()
  (princ "Enter Radius: ")
  (defparameter radius (read))
  (defparameter area (* 3.1416 radius radius))
  (princ "Area: ")
  (write area))
(AreaCircle)

问题是,slime运行它时没有问题,但当我使用(编译文件“area.lisp”:输出文件“area”)编译它时,它首先计算(读取)部分;它要求在打印任何内容之前将值传递给radius。

代码中没有任何内容强制将(缓冲)输出发送到终端。添加对
(强制输出)
(完成输出)
的调用将有所帮助


此外,在应该使用
let
的位置使用
defparameter
。您最好使用
pi
而不是近似值,并使用带有适当格式字符串的
format
来打印结果。

查看强制输出。虽然本身不错,但像您这样在函数内部使用
defparameter
是不常见的。此外,我还要编写函数
circle area
。Joshua Taylor关于force output()的说法是对的,这是一堂关于良好Lisp语法的好课,它解决了我的问题。