それで、Land of Lisp を手に入れて、最初のプログラムを始めました。いくつか質問があります。
REPL を使用せずに、コードを記述してコンパイラまたはインタープリタで実行する方法はありますか? 私はそれがあまり好きではありません。下手したら元には戻れないらしい。「ハ、あなたは台無しにしました、その関数全体を再入力してください」と言っているだけです。
REPLのポイントも知りたいです。
それで、Land of Lisp を手に入れて、最初のプログラムを始めました。いくつか質問があります。
REPL を使用せずに、コードを記述してコンパイラまたはインタープリタで実行する方法はありますか? 私はそれがあまり好きではありません。下手したら元には戻れないらしい。「ハ、あなたは台無しにしました、その関数全体を再入力してください」と言っているだけです。
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
$
Emacs with SLIMEなどの IDE を使用します。
このようにして、自動インデントをサポートし、各標準シンボルのヘルプを表示するエディターでコードを編集します。
関数を記述したらすぐにコンパイルしてテストするため、開発サイクルが非常に短くなります。内部的には、IDE が 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)