3

所以我刚拿到Land of Lisp,开始做第一个程序。我有几个问题。

有没有办法只编写一些代码并通过编译器或解释器运行它,而不使用 REPL 东西?我不太喜欢。如果我搞砸了,我似乎无法回去。它只是说“哈,你搞砸了,重新输入整个函数。”

我也想知道 REPL 的意义是什么。

4

1 回答 1

18

非 REPL 工作流程

  1. 编辑您的文件
  2. compile-file使用;编译文件 修复错误和警告;重复。
  3. 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 交互来完成的(这回答了您的最后一个问题)。

什么是 REPL?

Read-Eval-Print 循环是 Edit-Compile-Run 循环的更快、更通用的版本。

不是根据整个程序进行操作(编译起来可能很慢,并且执行导航到被测试的特定位置可能很乏味),而是根据您处理的特定功能进行操作。

例如,在 中gdb,您可以使用 执行函数print my_func(123),但如果更改my_func,则必须重新编译文件并重新链接整个可执行文件,然后将其重新加载到gdb中,然后重新启动该过程。

使用 Lisp 风格的 REPL,您需要做的就是重新eval生成,(defun my-func ...)并且您可以(my-func 123)在提示符处进行操作。

于 2013-03-29T18:40:10.190 回答