本項ではSchemeプログラムを書くにあたっての辞書的規約をいくつか、形式にこだわらずに説明する。Schemeの構文則についてはsection 8.1 構文則参照。
文字定数と文字列定数の内部を除いて、大文字の文字と小文字の文字は全く区別されない。例えばfoo
はFOO
と同一の識別子であり、#x1AB
と#X1ab
は同一の数である。
他のプログラミング言語で許されている識別子のほとんどは、Schemeでも許される。識別子を形成する厳密な規則はSchemeの処理系ごとに異なるが、すべての処理系において、文字の連続、数字、それに数字の開始となることがあり得ない"拡張アルファベット文字"は、識別子である。加えて、+
、-
、および...
は識別子である。識別子の例をいくつか次に示す。
lambda q list->vector soup + V17a <=? a34kTMNs the-word-recursion-has-many-meanings
拡張アルファベット文字は、識別子の中で文字のように使用することができる。拡張アルファベット文字は次のものである。
! $ % & * + - . / : < = > ? @ ^ _ ~
識別子の形式構文についてはsection 8.1.1 辞書的構造参照。
Schemeプログラムでは、識別子は次の二つの用途に使用される。
空白文字はスペース文字類と改行文字類である(実際の処理系では概して、タ ブや改ページなどの追加の空白文字が用意されている)。空白文字は可読性を 増すためと、必要に応じてトークン同士を分離するために使用されるが、それ 以外の場合は意味を持たない。トークンは識別子や数などの文法上分割できな い単位である。空白は二つのいかなるトークンの間にも挿入できるが、トーク ン内部に入れてはならない。文字列の中では必要に応じて空白を入れることが できる。
セミコロン(;
)はコメントの開始を示す。セミコロンは、それが現れた行の終端まで有効である。コメントはSchemeからは見えないが、行の終りは空白として認識される。これにより、識別子や数の内部にコメントが入り込むことが防止される。
;;; FACT 手続きは ;;; 非負の整数の階乗を計算する (define fact (lambda (n) (if (= n 0) 1 ;終了の場合: 1が返される (* n (fact (- n 1))))))
数に使用される記法についてはsection 7.2 数参照。