我在解释器上执行这个语句
foldr (\x (a, b) -> if x == '_' then (a+1, [((div a 3), (mod a 3))] ++ b) else (a, b)) (0, []) "_______OX"
我希望输出是
(7,[(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2.0)])
但是输出是
(7,[(2,0),(1,2),(1,1),(1,0),(0,2),(0,1),(0,0)])
我究竟做错了什么。据我所知, foldr 从列表的最后一个元素开始,我的 lambda 函数将其附加到累加器列表的开头。所以我应该得到 (0,0) 作为第一个元素。然而,事实恰恰相反,我很困惑。:(
另外,一个小问题 - 我如何为这些问题分配标签?