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语法的好课,它解决了我的问题。