R6RS:翻訳:R6RS:9.1 Primitive expression types

R6RS:翻訳:R6RS:9.1 Primitive expression types

9.1 原始式型

本節で述べるのはすべて式についてであり、 <expression> 構文変数の部分に現れるものである。 R6RS:翻訳:R6RS:11.4 Expressions も参照

定数リテラル

[syntax] <number>

[syntax] <boolean>

[syntax] <character>

[syntax] <string>

[syntax] <bytevector>

数値オブジェクト、真偽値、文字、文字列バイトベクタの表現から成る式は「それ自体に」評価される。

145932             ⇒  145932
#t           ⇒  #t
"abc"              ⇒  "abc"
#vu8(2 24 123)         ⇒ #vu8(2 24 123)

5.10 で触れたように、リテラル式の値は変更不能である。

変数参照

[syntax] <variable>

変数(R6RS:翻訳:R6RS:5.2 Variables, keywords, and regions)から成る式は、それがマクロの使用でなければ変数の参照である(下記)。変数参照の値は変数が束縛されている場所に格納されている値 である。未束縛の変数を参照するのは構文違反である。

下の例は基盤ライブラリが導入されていることを仮定している。

(define x 28)
x           ⇒  28

手続き呼び出し

[syntax] (<operator> <operand1> ...)

手続き呼び出しは呼び出される手続きに対応する式とそれに渡される引き数に、それを囲む括弧で構成される。式の文脈にあるフォームは <operator> が構文キーワードに束縛された識別子(下の R6RS:翻訳:R6RS:9.2 Macros 参照)でなければ手続き呼び出しである。

手続き呼び出しが評価されると、演算子と演算対象が(未規定の順序で)評価され、戻り値の手続きが演算対象の評価結果に渡される。

次の例は (rnrs base (6)) ライブラリが導入されていることを仮定している。

(+ 3 4)                                  ⇒  7
((if #f + *) 3 4)                 ⇒  12

<operator> の値が手続きでない場合 &assertion コンディション型の例外が発生する。また、 <operator> が <operand> の個数だけの引き数を受け取らない場合にも、 &assertion コンディション型の例外が発生する。

: 他の Lisp 方言とは対照的に、評価順序は規定されていず、演算子式と演算対象式は常に同一の評価規則で評価される。

評価順序は他の面では規定されていないが、演算子や演算対象式を任意の並列評価の結果は何らかの線型の評価順序と一貫性があるよう制約されている。評価順序は各手続き呼び出しで異なって選ばれてもかまわない。

: 多くの Lisp 方言では、 () というフォームは正当な式である。 Scheme では、リストや対として書かれた式は最低でもひとつの部分式を持たなければならない。ために、 () は構文上有効な式ではない。


Last modified : 2008/03/20 10:05:52 UTC