関数型プログラミング言語Haskell Part15
■ このスレッドは過去ログ倉庫に格納されています
0884デフォルトの名無しさん
2011/10/03(月) 20:45:50.39次のようなデータ型と関数があるとします
data A = A Int
f :: a -> b -> ・・・ -> A Int
g :: A Int -> Int -> b
g (A x) y = [関数 g の計算]
関数 f はいくつかの引数を使って A Int 型の値を計算します
関数 g は A Int 型と Int 型の値を使って適当な b 型の値を計算します
第2引数が 0 以外の場合、x を使って b 型の値を計算しますが、
第2引数が 0 の場合、b 型の値を計算するのに x は全く利用しません
ここで、次のような式の場合、
x = g (f ・・・) 0
g (f ・・・) 0 を [関数 g の計算] に簡約し始める前に、
g の第2引数を (A x) にパターンマッチさせる為に、
先に f ・・・ を (A x) の形になるまで簡約されるのでしょうか
それとも、まず g (f ・・・) 0 が [関数 g の計算] の形に簡約され、
[関数 g の計算] の中で (A x) の x が必要になってから、
それから (f ・・・) が (A x) の形になるまで簡約されるのでしょうか
もしそうなら、上記の式の場合は第2引数が 0 なので (f ・・・) は簡約されませんよね
今回の場合は、遅延パターンマッチではないので前者の簡約順になる
と私は思っているのですが合ってますか、それとも、どちらも間違いですか
■ このスレッドは過去ログ倉庫に格納されています