【问题标题】:Can you program without REPL on Lisp?你可以在 Lisp 上不使用 REPL 编程吗?
【发布时间】:2013-03-20 11:44:14
【问题描述】:

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

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

我也想知道 REPL 的意义何在。

【问题讨论】:

标签: lisp common-lisp read-eval-print-loop land-of-lisp


【解决方案1】:

非 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,例如,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)

【讨论】:

    猜你喜欢
    • 2010-12-22
    • 1970-01-01
    • 2018-08-15
    • 2019-11-08
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    相关资源
    最近更新 更多