1.1.1 Expressions

(原書のまとめ)

とりあえず Scheme で典型的なものを試してみるのが早道。

  • 数値 (number) (ここでは10進数で入力)
  • プリミティブな手続き (+, *, etc.)

例:

$ gosh
gosh> 486
486
gosh> (+ 137 349)
486
gosh> (- 1000 334)
666
gosh> (* 5 99)
495
gosh> (/ 10 5)
2
gosh> (+ 2.7 10)
12.7
gosh> (exit)

括弧 () で括られた数値と手続きを「結合 (combination)」という。

  • 左端の要素:演算子 (operator)
  • 二番目、三番目の要素:オペランド (operands ...ここでは2つあるので)

左側に演算子が来て次にオペランドがくる記法を「前置記法 (prefix notation) 」という。
前置記法の利点
1. オペランドを何個つなげても計算できる
例:

gosh> (+ 21 35 12 7)
75
gosh> (* 25 4 12)
1200

この記法だと、必ず演算子が左側に来て、( ) によって結合の範囲が区切られているので、曖昧さがない。

2. ネスト (nest) による結合の拡張が簡単にできる
例:

gosh> (+ (* 3 5) (- 10 6))
19
gosh> (+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6))
57

括弧が多すぎて見づらいときには次のように書くこともできる (pretty-printing)
例:

gosh> (+ (* 3
            (+ (* 2 4)
               (+ 3 5)))
         (+ (- 10 7)
            6))
57

どんな複雑な式であっても、インタプリタは常に次のサイクル (read-eval-print loop)を繰り返す。

  1. 端から式を読み込む
  2. 式を評価する (evaluate)
  3. 結果を表示する

式の値を表示させるための明示的な命令はこのインタプリタでは必要ない。