foldr
という用語で、プリミティブ再帰を定義しようとしています(A tutorial on the universality and expressiveness on foldの章4.1を参照)。ここでパターンマッチングと解体の厳密性
は、定義上で以下head $ simpleRecursive (\x xs acc -> x:xs) [] [1..]
のために停止しません。しかし、それ
simpleRecursive f v xs = fst $ foldr g (v,[]) xs
where
g x (acc, xs) = (f x xs acc,x:xs)
で初めての試みであり、ほぼ同様の定義が異なる結果を考えると
simpleRecursive f v xs = fst $ foldr g (v,[]) xs
where
g x r = let (acc,xs) = r
in (f x xs acc,x:xs)
を停止定義であり、それはなぜ違いますか?それはHaskellのパターンがどのように一致するかと関係がありますか?
に相当します。 – chepner