(rontolisp) docs

REPL

ファイルなしで --source-language clojure を付けると Clojure REPL (clojure> プロンプト)が始まります。1 フォームは複数行にまたがれます。完全性は 文字列とコメントの外側の ()[]{} 括弧数で決まります。別々のプロンプトで入力された定義は 1 ファイルに書いたときと同様に互いを見えます:各バッファは走る前にトップレベルの def/defn 名を宣言するので、後のバッファは先のバッファが定義したものを呼べます。 (ns name) や (in-ns 'name) のバッファは、その下の :: キーワードが解決される *ns* を切り替えます(ファイル自身の ns フォームと同様)。値の エコーは Clojure 記法で可読に描画されます。トップレベルの def・defn・defn-・defmacro・ defmulti・defonce は定義した var(#'user/twice)をエコーし、束縛済みの var への defonce は nil をエコーします。 defprotocol は名前(P)、defrecord と deftype はクラス名(user.R)、declare は最後の名前の var、 他のフォームに入れ子になった def もその var をエコーします。ファイルでは入れ子の def は値を返します。

oracle の REPL と同じく、*1、*2、*3 は直近 3 つの入力の値(ns の入力は nil を 記録します)を、*e は入力が投げた最後の例外を持ちます。例外はこれらの値を変えません。 入力の読み込みや lowering での拒否は例外ではなく、何も記録しません。*repl* は true で 束縛されており、*file* は "NO_SOURCE_PATH"、*source-path* は "NO_SOURCE_FILE" です。

$ rontolisp --source-language clojure
clojure> (defn twice [x] (* 2 x))
#'user/twice
clojure> (twice 21)
42
clojure> [*1 *2]
[42 #'user/twice]
clojure> (/ 1 0)
Error: Division by zero
clojure> (ex-message *e)
"Division by zero"