LISP语言BMI计算程序中SETQ设置变量时出错求助
BMI计算LISP代码错误修复
错误原因
报错*** - SETQ:variable CALC has no value是因为你写了(setq bmi calc),这里的calc是你定义的函数,不是变量。Lisp中函数和变量属于不同命名空间,你试图读取calc变量的值,但这个变量从未被定义,因此触发错误。你真正需要的是把calc函数调用后的BMI计算结果赋值给bmi变量,而非函数本身。
另外还有一个细节问题:你用~D格式符打印BMI值,~D用于格式化整数,而BMI是浮点数,应该用~F保留小数精度。
修正后的代码
(write-line "BMI CALC") (defun calc nil (prog (w h) ; 定义w和h为局部变量,初始值为nil (print "Weight: ") (setq w (read)) (print "Height: ") (setq h (read)) (return (/ w (* h h))) ) ) ; 先调用calc函数获取结果并存入bmi变量,再打印 (setq bmi (calc)) (format t "BMI: ~F~%" bmi) ; 根据bmi值判断体重分类 (cond ((< bmi 18.5) (print "Under weight")) ((< bmi 24.9) (print "Normal weight")) ((< bmi 29.9) (print "Overweight")) ((< bmi 34.9) (print "Obesity 1")) ((< bmi 39.9) (print "Obesity 2")) (t (print "Obesity 3")) )
运行结果示例
输入体重78、身高1.7后,输出如下:
BMI CALC "Weight: " 78 "Height: " 1.7 BMI: 26.989618 "Overweight"
内容的提问来源于stack exchange,提问作者Rebeca Maria Fialho Camilo
相关产品推荐
相关产品推荐

