jub*_*kon 0 haskell functional-programming
我必须编写一个函数choose l n,打印所有可能组合n的列表以选择列表的元素l.
作为一个例子,呼叫choose [1,2,3] 2返回[[1,2], [1,3], [2,3]]或[[2,1], [3,1], [3,2]]
不幸的是我不明白解决方案:
choose :: [a] -> Int -> [[a]]
choose _ 0 = [[]]
choose [] _ = []
choose (x:xs) n = (map (\ys -> x:ys) (choose xs (n-1))) ++ (choose xs n)
Run Code Online (Sandbox Code Playgroud)
我理解前两个陈述.最后一行对我来说并不清楚.
有人可以解释一下吗?
人们可以n从x:xs两个方面选择元素:要么x被选中,要么不被选择.
如果x选择,我们将选择n-1来自的元素xs.所以,我们递归地做choose xs (n-1),然后我们添加x到顶部map (\ys -> x:ys).
如果x没有选择,我们将选择n尾部的所有元素xs.所以,我们考虑一下choose xs n.
最后,我们将所有这些选择放在一起++.
| 归档时间: |
|
| 查看次数: |
606 次 |
| 最近记录: |