我有我無法理解這個謎底功能:哈斯克爾 - 幫助理解函數
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