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

Lisp(SBCL)用户输入程序报错求助:未定义变量NAME

问题排查与解决:Lisp中未定义变量NAME的警告

问题原因

你代码里的let表达式作用域使用错误。在Common Lisp中,let的语法是(let ((变量 初始值)) 体代码),变量的有效范围仅限于let的体代码部分。你的代码里(let ((name (read))))直接用括号闭合了,没有把后续需要使用name的代码包含在let的体里,导致后面的(princ name)引用的是未定义的全局变量,因此触发警告。

修正后的代码

调整括号结构,将需要访问name的语句放到let的体内部:

(defun say-hello ()
  (princ "What is your name? ")
  (let ((name (read)))
    (princ "Hello: ")
    (princ name)))

补充说明

  • Lisp社区通用命名惯例:函数名通常用连字符分隔小写字母(比如say-hello),而非驼峰式SayHello。
  • 如果需要读取带空格的名字(比如全名),可以把read换成read-line,示例:
(defun say-hello ()
  (princ "What is your name? ")
  (let ((name (read-line)))
    (princ "Hello: ")
    (princ name)))

内容的提问来源于stack exchange,提问作者Coldchain9

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:37:37