所以我得到了Land of Lisp并开始做第一个程序。 我有几个问题。
有没有办法只编写一些代码并通过编译器或解释器运行它,而不是使用REPL的东西?我不喜欢它。如果我搞砸了,我似乎无法回去。它只是有点说“你搞砸了,重新输入整个功能。”
我也想知道REPL的重点是什么。
答案 0 :(得分:18)
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交互来完成的(这回答了你的上一个问题)。
Read-Eval-Print循环是Edit-Compile-Run循环的更快,更通用的版本。
您可以根据您所使用的特定功能进行操作,而不是根据整个程序(可能编译速度慢,执行繁琐而无法导航到正在测试的特定位置)进行操作。
例如,在gdb
中,您可以使用print my_func(123)
执行函数,但是如果更改my_func
,则必须重新编译该文件并重新链接整个可执行文件,然后重新加载它进入gdb
,然后重新启动该过程。
使用Lisp风格的REPL,您需要做的就是重新eval
(defun my-func ...)
,并且可以在提示时执行(my-func 123)
。