You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 11:55:26