「48時間でSchemeを書こう/変数と代入」の版間の差分
削除された内容 追加された内容
翻訳の修正 |
翻訳の修正2 |
||
50 行
まず最初に、readIORefを使って、IORefから実際の環境の値を取り出します。そして、私たちが関心のある変数を探すため、この環境の値をlookupに渡します。lookupはMaybeの値を返すので、もしこの値がNothingならばFalseを返し、他の値ならTureを返します(ここで[http://www.haskell.org/onlinereport/standard-prelude.html#$vconst const]関数を使います。 というのも、[http://www.haskell.org/onlinereport/standard-prelude.html#$vmaybe maybe]が要求するのは、ただの値ではなく、結果を実行する関数だからです)。最後に値をIOモナドに持ち上げるためreturnを使います。ここではtrueかfalseかの値に興味があるので、lookupが返した実際のIORefを扱う必要はありません。
getVar :: Env -> String -> IOThrowsError LispVal
58 行
(lookup var env)
これは、前出した関数のように、まず、IORefから実際の環境を取り出し
関数に、値をセットする関数を作りましょう。
69 行
return value
次は、変数が既に束縛されている場合は、変数をセットし、そうでない場合は、新しく変数を作成する、という[http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-8.html#%_sec_5.2 define]の動作を実現しましょう。前者の場合には、
defineVar :: Env -> String -> LispVal -> IOThrowsError LispVal
84 行
return value
興味深いのは、後者の、変数が束縛されていない
もうひとつ便利な環境関数を作りましょう。この環境関数は、関数の実行に際して、変数の一群を一度に束縛することができます。次のセクションまで使うことはないでしょうが、今なら、これを上手く作成できます。
|