所以我刚拿到Land of Lisp,开始做第一个程序。我有几个问题。
有没有办法只编写一些代码并通过编译器或解释器运行它,而不使用 REPL 东西?我不太喜欢。如果我搞砸了,我似乎无法回去。它只是说“哈,你搞砸了,重新输入整个函数。”
我也想知道 REPL 的意义是什么。
所以我刚拿到Land of Lisp,开始做第一个程序。我有几个问题。
有没有办法只编写一些代码并通过编译器或解释器运行它,而不使用 REPL 东西?我不太喜欢。如果我搞砸了,我似乎无法回去。它只是说“哈,你搞砸了,重新输入整个函数。”
我也想知道 REPL 的意义是什么。
compile-file
使用;编译文件 修复错误和警告;重复。load
使用;加载文件 评估您想要的形式;重复$ cat > f.lisp <<EOF
(defun f (x) (if (zerop x) 1 (* (f (1- x)) x)))
EOF
$ clisp -q -norc -c f.lisp
;; Compiling file /home/sds/f.lisp ...
;; Wrote file /home/sds/f.fas
0 errors, 0 warnings
$ clisp -q -norc -i f.fas -x '(f 10)'
;; Loading file f.fas ...
;; Loaded file f.fas
3628800
$
使用 IDE,例如带有 SLIME 的 Emacs。
这样,您可以在支持自动缩进的编辑器中编辑代码,并向您显示每个标准符号的帮助。
您在编写函数后立即编译和测试它们,从而为您提供非常短的开发周期。在后台,这是通过 IDE 与 REPL 交互来完成的(这回答了您的最后一个问题)。
Read-Eval-Print 循环是 Edit-Compile-Run 循环的更快、更通用的版本。
不是根据整个程序进行操作(编译起来可能很慢,并且执行导航到被测试的特定位置可能很乏味),而是根据您处理的特定功能进行操作。
例如,在 中gdb
,您可以使用 执行函数print my_func(123)
,但如果更改my_func
,则必须重新编译文件并重新链接整个可执行文件,然后将其重新加载到gdb
中,然后重新启动该过程。
使用 Lisp 风格的 REPL,您需要做的就是重新eval
生成,(defun my-func ...)
并且您可以(my-func 123)
在提示符处进行操作。