【发布时间】:2015-05-22 13:16:13
【问题描述】:
所以我写了一个函数,它将列表列表作为参数,并从第一个列表中获取每个元素,并将其附加到列表尾部的递归调用函数中,结果返回所有可能的选择组合这些列表中的元素。
foo :: [[a]] -> [[a]]
foo [] = [[]]
foo (x:xs) = [[(x !! a)] ++ b | a <- [0..length(x)-1], b <- foo xs]
*Main> foo [[1, 2], [3, 4], [5, 6]]
[[1, 3, 5], [1, 3, 6], [1, 4, 5], [1, 4, 6], [2, 3, 5], [2, 3, 6], [2, 4, 5], [2, 4, 6]]
它确实可以正常工作,但是每当我将函数的第二行更改为
foo [] = []
每当我在类型有效的参数上调用它时,它总是返回一个空列表。有什么大不了的?
【问题讨论】:
-
当
xs为空时,您的b <- foo xs将无法获得任何东西(因为从无中提取b永远不会得到b)- 这是大交易(在正确的情况下它会拉b <- [[]]所以b将得到[]):D -
哦,当然。谢谢:)
-
这可以作为你的答案吗?
-
是的,我现在完全明白了。
-
你能解释一下吗
标签: list haskell append list-comprehension