(rontolisp) docs
← 構文と定義

def

(def name) (def name expr)

トップレベル変数を定義し、mangle した名前への setq へ低レベル化します。値がなければ、オラクルと同じく定義が束縛するまで var は未束縛です(未束縛のルートは declare 参照)。束縛済みのルートは変えません。本体の中では、def は本体の実行時にグローバルへ設定します -- ローカル束縛ではなく、ローカル束縛は let の役割です。名前は VARIABLE なので、head 位置での呼び出しは値セルの funcall です。

値は古い束縛に対して評価されるため、(defn p ...) の後の (def p (memoize p)) は関数セルを取り込みます。トップレベル呼び出しはキャッシュに当たり、defun 自身の再帰は直接呼び出しのままです -- 完全にメモ化された再帰には ^:dynamic を使います(defn 参照)。