我有我无法理解这个谜底功能:哈斯克尔 - 帮助理解函数
mystery :: [a] -> [[a]]
mystery [] = [[]]
mystery (x:xs) = sets ++ (map (x:) sets)
where sets = mystery xs
这里有一些输入,结果:
mystery [1,2] returns [[],[2],[1],[1,2]]
mystery [1,2,3] returns [[],[3],[2],[2,3],[1],[1,3],[1,2],[1,2,3]]
通过看结果,我可以看到它计算列表中所有可能的数字组合,但不是所有可能的permuations ...我想。
我遇到的麻烦实际上是通过递归和理解函数如何获得这些结果。
我想我得到了它的开始 - >映射(1 :)到[2]上,产生[1,2],但是在这一点上,我很困惑递归如何工作,以及我是否仍然映射(1 :)或现在(2 :),然后到什么。
如果任何人都可以通过逐步解释(使用提供的示例之一)来帮助我解决这个函数如何工作(使用地图并设置递归),这将不胜感激!
谢谢!
这里是一个'家庭作业'标签吗?它看起来像功课。 –
这实际上不是家庭作业。参与学校,是的,但不是功课。我正在学习Haskell的测试,并试图更好地理解这个例子。 – Shabu