(rontolisp) docs

構文

  • リーダー(大文字小文字を区別): #t #f #true #false、整数、小数、有理数、 +inf.0 -inf.0 +nan.0 -nan.0(大文字小文字を問わない)、#x #b #o #d、任意の文字からなる |...| 識別子(\| と文字列のエスケープが使え、大文字小文字は畳み込まれない)、#\a #\space #\newline #\x41、 \n \t \" \\ \xHH; を含む文字列、#( ) ベクタ、#u8( ) バイトベクタ、ドット対、' ` , ,@、;、#;、 #| |#、#!fold-case / #!no-fold-case(ファイル単位。識別子と文字名を string-foldcase と同じく畳み込む -- 文字列や文字そのものは 対象外 -- 対になる指示子かファイル末尾まで有効)。
  • 特殊形式: リファレンスの構文に 1 つずつページがあります (delay と delay-force は (scheme lazy)、case-lambda は (scheme case-lambda))。および (import (scheme base) (scheme write) (scheme read) (scheme char) (scheme inexact) (scheme cxr) (scheme lazy) (scheme case-lambda) (scheme process-context) (scheme eval) (scheme repl) (scheme file))(only / except / prefix / rename 可)。

12 のライブラリそれぞれが何をエクスポートするかはライブラリを、 import を一切書かない場合に見える名前は Structure and Interpretation of Computer Programs(SICP)互換を参照してください。

マクロ

syntax-rules 変換子による define-syntax、let-syntax、letrec-syntax: リテラル、_、...(入れ子、後続パターン付き、ドット対の末尾、ベクタ内)、 独自の省略記号 (syntax-rules ::: (literal ...) rule ...)、(... ...) エスケープ、 syntax-error に対応します。構文定義はトップレベルか本体の先頭に置けます。 マクロは定義(begin を含む)に展開されても構いません。

マクロは健全です。テンプレートが束縛する変数(下の tmp)は利用者が書いた名前を 捕捉せず、テンプレートが自由に使う名前(下の if)は、利用箇所で何が束縛されていても、 マクロを定義した場所での意味を保ちます。

(2 1)
5

制限: 変換子は syntax-rules のみです。マクロは定義したファイルの中でだけ見えます ((load ...) したファイルは読み込み元のマクロを見ず、その逆も同じです)。 テンプレートがトップレベルの define-record-type に持ち込む名前は改名されません。 eval はマクロを知らず、define-syntax を拒否します。