すべて式である

106ページからのコラム「すべて式である」。
今までSchemeをやってきて、このコラムが言いたいことは大体理解できた。
だけど、評価結果が未定義の場合はどうするのだろう。
Schemeでの未定義な値は、Gaucheでは#らしいけど、この値を使って何かを計算するのはOKなのかな。
いや、未定義の値を使って計算した結果はやっぱり未定義なんだろうけど。
未定義ってことは、Gauche以外のScheme処理系では違う値を返すかも知れないってことだよなぁ。
たとえば、whenでは条件式が真となる場合にのみwhen全体が定義できるけど、例えば

(some-func
  (when foo
    (bar)
    (baz)
    (qux)))

みたいな、whenの評価を待っている外側の手続きがあった場合、条件式fooが#fになってしまったら外側の手続きは実行していいのかな。
それともwhenの結果を使うようなコードは書かないのが一般的なのかな...。
はて。


それと、105ページのwhenの説明では

条件一致の場合のみ処理を行う

って書いてあるけど、「処理」って言葉にはどうしても「プログラム=手順」という感じがして、なんとなく違和感がある。
手続きを「実行」する、とかいう言い方も然り。


ってことで、8章終わり。
9章のタイトルは「状態の管理」だ。
代入が一般的ではないSchemeで、どうやって状態を扱うのかとても興味がある。