【发布时间】:2016-08-18 15:13:23
【问题描述】:
我对 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])
如果有任何帮助,我将不胜感激。提前致谢。
【问题讨论】:
-
无积分,这只是
rev = reverse . map reverse -
顺便说一句,通过模式匹配编写
reverse的自然方式是使用辅助函数和累加列表;先rev ls = loop [] ls然后loop acc [] = acc; loop acc (a:as) = loop (a:acc) ls
标签: list haskell functional-programming reverse