【发布时间】:2015-07-07 23:04:49
【问题描述】:
我无法弄清楚 Haskell 第 11 章编程中以下“交错”函数的递归机制是如何工作的。
-- Definition
interleave :: a -> [a] -> [[a]]
interleave a [] = [[a]]
interleave x (y:ys) = (x:y:ys):map (y:) (interleave x ys)
-- Example
> interleave 3 [4,5,6,7]
[[3,4,5,6,7],[4,3,5,6,7],[4,5,3,6,7],[4,5,6,3,7],[4,5,6,7,3]]
它在底层是如何工作的?
我陷入了这样的推理:
interleave 3 [4,5,6,7]
= [3,4,5,6,7]:map (4:) (interleave 3 [5,6,7])
= [3,4,5,6,7]:[4,3,5,6,7]:map (5:) (interleave 3 [6,7])
= [3,4,5,6,7]:[4,3,5,6,7]:[5,3,6,7]:map (6:) (interleave 3 [7])
= [3,4,5,6,7]:[4,3,5,6,7]:[5,3,6,7]:[6,3,7]:map (7:) (interleave 3 [])
= [3,4,5,6,7]:[4,3,5,6,7]:[5,3,6,7]:[6,3,7]:[7,3]:[[3]]
= [[3,4,5,6,7],[4,3,5,6,7],[5,3,6,7],[6,3,7],[7,3],[3]]
???
/= [[3,4,5,6,7],[4,3,5,6,7],[4,5,3,6,7],[4,5,6,3,7],[4,5,6,7,3]]
请赐教.. 非常感谢。
【问题讨论】:
-
你想要用于定义
interleave方法的代码吗?