「48時間でSchemeを書こう/Scheme関数の定義」の版間の差分

削除された内容 追加された内容
M編集の要約なし
M編集の要約なし
7 行
body :: [LispVal], closure :: Env}
 
 私たちはprimitivesにセパレータコンストラクタを追加しました。というのも、私たちは +やeqv?等のように、扱いたいからです。変数は、関数に渡されます。PrimitiveFuncコンストラクタはThrowsError LispValに対して、引数のリストを取るような関数を扱います。それはprimitiveリストで扱われているのと同じタイプです。
 
 私たちは同様に、ユーザー定義型関数を扱うためのコンストラクタが欲しい。私たちは4つの情報を扱います。
34 行
apply (PrimitiveFunc func) args = liftThrows $ func args
 
 私たちがユーザー定義型関数にはちあわせたとき、この興味深いコードが起きます。Recordsは名フィールド名(見られるよりも上に)か、フィールドポジションの両方にマッチするパターンで、後の方で使います。
apply (Func params varargs body closure) args =