非 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,例如,Emacs with SLIME。
这样,您可以在支持自动缩进的编辑器中编辑代码,并向您显示每个标准符号的帮助。
您在编写函数后立即对其进行编译和测试,从而使您的开发周期非常短。在后台,这是通过 IDE 与 REPL 交互来完成的(这回答了您的最后一个问题)。
什么是 REPL?
Read-Eval-Print 循环是 Edit-Compile-Run 循环的更快、更通用的版本。
您不是根据整个程序进行操作(编译起来可能很慢,并且执行导航到被测试的特定位置可能很乏味),而是根据您处理的特定功能进行操作。
例如,在gdb中,你可以用print my_func(123)执行一个函数,但是如果你改变my_func,你必须重新编译文件并重新链接整个可执行文件,然后重新加载到gdb中,并且然后重新启动该过程。
使用 Lisp 风格的 REPL,您只需将eval 转为(defun my-func ...),然后您可以在提示符处执行(my-func 123)。