在Haskell中反转另一个列表中的列表

ZCo*_*der 0 reverse haskell functional-programming list

我对Haskell很陌生,我正试图扭转一个列表.同时我想反转该列表中的列表.例如:

Prelude> rev [[3,4,5],[7,5,2]]
[[2,5,7],[5,4,3]]
Run Code Online (Sandbox Code Playgroud)

我知道以下代码反转了一个列表:

rev :: [[a]] -> [[a]]
rev [[]] = [[]]
rev [[x]] = [[x]]
rev xs = last xs : reverse (init xs)
Run Code Online (Sandbox Code Playgroud)

我一直在苦苦挣扎,我已经对代码做了一些补充,但它仍然没有用,而且我被卡住了.

rev :: [[a]] -> [[a]]
rev [[]] = [[]]
rev [[x]] = [[x]]
rev xs = last xs : reverse (init xs)
rev [xs] = last [xs] : reverse (init [xs])
Run Code Online (Sandbox Code Playgroud)

我很感激任何帮助.提前致谢.

vil*_*u24 7

我们必须扭转内部列表和外部列表.要反转内部列表,您可以使用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]].

这项作业甲函数仅是一种组合物reversemap reverse,所以rev = reverse . map reverse.

在这里我们首先反转内部列表然后反转外部列表,但顺序无关紧要,我们可以反过来做:rev = map reverse . reverse.