我不确定这两段代码之间的区别是什么(相对于x
),但第一个完成:
$ foldr (\x y -> if x == 4 then x else x + y) 0 [1,2 .. ]
10
而第二个没有(至少在 GHCi 中):
$ foldr (\x (y, n) -> if x == 4 then (x, n) else (x + y, n + 1)) (0, 0) [1,2 .. ]
.......
我做错了什么,阻止了第二个例子在它命中时完成x == 4
,就像第一个例子一样?
我已经尝试在 thex
和x == 4
(inside a let
) 中添加爆炸模式,但似乎都没有什么不同。