R6RS:翻訳:R6RS:1.7 Procedure calls and syntactic keywords

R6RS:翻訳:R6RS:1.7 Procedure calls and syntactic keywords

1.7 手続き呼び出しと構文キーワード

(+ 23 42) や (f 23)、 ((lambda (x) (+ x 42)) 23)) はいずれも手続き呼び出しの例であるが、 lambda 式や let 式はそうではない。これは、let は識別子ではあるが、変数ではなく、構文キーワードであるからである。構文キーワードをその最初の部分式として持つフォームはその構文キーワードによって決定される特別な規則に従う。定義中の define 識別子も構文キーワードである。したがって、定義も手続き呼び出しではないのである。

lambda キーワードの規則では、最初の下位フォームが仮引き数のリストであり、残りの部分フォームが手続きの本体部分であることを指定している。 let 式では最初の下位フォームが束縛指定のリストであり、残りの下位フォームが式の本体部分を構成する。

手続き呼び出しは、一般にフォームの最初の部分の構文キーワードを見つけることにより区別される。最初の部分に構文キーワードを含まない場合、その式は手続き呼び出しである(いわゆる識別子マクロを使うと別種の特殊形式作ることができるが、比較的稀にしか現れない)。 Scheme の構文キーワードの集合は極めて小さく、そのために通常この作業が極めて単純になっている。ただし、構文キーワードの束縛を新たに作ることも可能である。下の R6RS:翻訳:R6RS:1.9 Derived forms and macros を参照。


Last modified : 2008/11/07 22:31:11 UTC