(rontolisp) docs

REPL

ファイル引数なしで rontolisp を実行すると、対話的な read-eval-print ループ(REPL)が起動します。1 つずつ式を読み込み、ツリーウォークインタプリタで 評価して結果を表示します。言語を試すのに最も手早い方法です。

rontolisp
CL-USER> (+ 1 2)
3
CL-USER> (* 3 (+ 4 5))
27
CL-USER> (defun fact (n) (if (= n 0) 1 (* n (fact (- n 1)))))
FACT
CL-USER> (fact 10)
3628800
CL-USER> (quit)

各トップレベルフォームは完成するとすぐに評価され、その値がエコーバックされます。 定義は入力をまたいで保持されます。あるプロンプトで入力した defundefvarsetq は以降のすべてのプロンプトで参照できるため、セッション内で段階的に状態を構築できます。

プロンプトには現在のパッケージの名前が出ます。 Common Lisp の REPL が CL-USER> と表示するのと同じものです。行ごとに読み直されるため、 あるプロンプトで入力した (in-package ...) は次のプロンプトに反映されます。 裸のシンボルがどのパッケージに読み込まれるかが見えないままにならない、ということです。

CL-USER> (defpackage :app (:use :cl))
APP
CL-USER> (in-package :app)
:APP
APP> (defun greet () "hi")
APP::GREET
APP> (in-package :cl-user)
:CL-USER
CL-USER> (app::greet)
"hi"

多値を返すフォームは、すべての値を 1 行ずつエコーバックします。floor の商と剰余、gethash の値と存在フラグなどです。 (values) は値を 1 つも返さないため、何も表示されません。

CL-USER> (floor 10 3)
3
1
CL-USER> (gethash 'b (make-hash-table))
NIL
NIL
CL-USER> (values 1 2 3)
1
2
3
CL-USER> (values)
CL-USER>

プロンプトは複数行入力を受け付けます。式の括弧が閉じていない場合、REPL は括弧が 閉じるまで読み込みを続け、それから評価します。また、行編集、上下の矢印キーによる 履歴ナビゲーション、Ctrl-C による現在の入力のキャンセルもサポートします。 終了するには (quit) と入力するか Ctrl-D を押します。

ここで簡単な式を試してみてください。