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
$ 

正しい道

Emacs with SLIMEなどの IDE を使用します。

このようにして、自動インデントをサポートし、各標準シンボルのヘルプを表示するエディターでコードを編集します。

関数を記述したらすぐにコンパイルしてテストするため、開発サイクルが非常に短くなります。内部的には、IDE が REPL と対話することによってこれが達成されます (これは最後の質問に答えます)。

REPLとは?

Read-Eval-Print ループは、Edit-Compile-Run ループのより高速で用途の広いバージョンです。

プログラム全体の観点から操作するのではなく (コンパイルが遅くなる可能性があり、テスト対象の特定の場所に移動するのが面倒な場合があります)、作業している特定の機能の観点から操作します。

たとえば、 では でgdb関数を実行できますprint my_func(123)が、 を変更した場合my_funcは、ファイルを再コンパイルして実行可能ファイル全体を再リンクし、それを に再読み込みしてからgdbプロセスを再起動する必要があります。

Lisp スタイルの REPL を使用すると、必要なことは re-だけでeval、プロンプトで(defun my-func ...)実行できます。(my-func 123)

于 2013-03-29T18:40:10.190 に答える