如何在Emacs中正确评估Lisp/Scheme代码?解决(define未定义)报错
解决在Emacs中运行SICP Lisp代码的错误问题
你遇到的错误核心原因是:Emacs默认执行的是Emacs Lisp(Elisp),而SICP教材使用的是Scheme语言,两者属于Lisp方言,但语法和环境不兼容——Elisp里没有Scheme式的define函数定义语法,所以才会报void-function define错误。
正确的代码运行方式
方式一:在Emacs内使用Scheme解释器环境
- 给Emacs安装Geiser插件(通过Emacs内置包管理器即可找到),同时安装一款Scheme实现(比如Guile或Racket)。
- 打开你的Scheme代码文件,执行
M-x geiser-run启动对应Scheme解释器。 - 此时可以用
C-x C-e(执行光标前的表达式)或M-x geiser-eval-defun(执行当前函数定义)来正常运行SICP中的代码。
方式二:在Emacs外部运行
- 将代码保存为后缀为
.scm的文件(比如test.scm)。 - 打开终端,使用Scheme解释器执行:
也可以直接进入解释器交互模式(终端输入# Racket解释器 racket test.scm # Guile解释器 guile test.scmracket或guile回车),直接输入代码测试。
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

