基本的な構文は、R5RSのサブセットになるように実装しています。
サブセットなので、全ての構文要素を使うことはできませんが、使える構文はR5RSと同じはずです。
構文要素には、式と文があります。式と文の違いは以下の通りです。
識別子は、変数名などに用いられます。用いれる文字は以下の通りです。
| 先頭 | !%&*/:<=>?^_~+-*. |
|---|---|
| 先頭以外 | 先頭で使える文字に加えて、@ |
上記以外にも$が使えますが、$は処理系内部の実装用に予約されています。特別な事情がない限り使うべきではありません。
リテラルは、全て式です。
整数は、以下の表記が可能です。
浮動少数は、-dd.ddd形式(例:12.3)形式のみ対応しています。
指数表記(例: 1.1e3)にた対応していません。
文字列は、"で囲みます。以下のエスケープシーケンスにも対応しています。
| \n | 改行文字 |
|---|---|
| \t | タブ文字 |
| \" | "そのもの |
| \\ | \そのもの |
真は#t、偽は#fです。
無名関数を定義します。
e1からenで構成されるリストを生成します。
リストを操作する関数は、標準ライブラリ?に定義されています。
e1からenで構成される配列を生成します。
配列を操作する関数は、まだ定義されていません。
testを評価し、真の場合ばconsが、偽の場合はaltが評価されます。
alt、いわゆるelse節を省略することはできません。
各節は以下の2つのうち、いずれかの形をしています。
後者は最後の節でのみ利用できます。
前から順にtestを評価していき、最初に真になった節のe1からenまでを評価します。
elseは常に真に評価されます。
変数を参照します。
参照を探す順は、
となっています。
またfoo.bar.xのようにモジュール名を明示的に指定することもできます。
モジュールシステムも参照してください。
ローカルな束縛を生成します。
var1をinit1に、var2をinit2に、..、束縛した後、e1、e2、..を評価します。
init_nから束縛した変数を参照できません。
ローカルな束縛を生成します。
var1をinit1に、var2をinit2に、..、束縛した後、e1、e2、..を評価します。
init_nから束縛した変数を参照できます。
現在のモジュールにおいてvarをbodyに束縛します。
モジュールシステムも参照してください。
(define f (lambda (arg1 arg2 ..) body))のシンタックスシュガーです。