我对Haskell还是很陌生,并且正在尝试撤消一份清单。同时,我想反转该列表中的列表。因此,例如:
Prelude> rev [[3,4,5],[7,5,2]]
[[2,5,7],[5,4,3]]
我知道以下代码会反转一个列表:
rev :: [[a]] -> [[a]]
rev [[]] = [[]]
rev [[x]] = [[x]]
rev xs = last xs : reverse (init xs)
我已经苦苦挣扎了一段时间,我对代码做了一些补充,但是它仍然无法正常工作,我陷入了困境。
rev :: [[a]] -> [[a]]
rev [[]] = [[]]
rev [[x]] = [[x]]
rev xs = last xs : reverse (init xs)
rev [xs] = last [xs] : reverse (init [xs])
我将不胜感激。提前致谢。
我们必须反转内部列表和外部列表。要反转内部列表,可以使用map
应用于reverse
列表的每个元素:map reverse [[3,4,5],[7,5,2]] == [[5,4,3],[2,5,7]]
。然后只需再次反转结果即可reverse $ map reverse [[3,4,5],[7,5,2]] == [[2,5,7],[5,4,3]]
。
这项作业的函数仅仅是一个的组合物,reverse
和map reverse
,所以rev = reverse . map reverse
。
在这里,我们首先颠倒内部列表,然后颠倒外部列表,但是顺序并不重要,我们可以用另一种方法来做到这一点:rev = map reverse . reverse
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句