列表反转

4
我想编写一个函数,它接收一个 int list list 并返回一个反转后的int list list。例如:
[[1;2;3];[4;5;6]] -> [[6;5;4];[3;2;1]]

到目前为止,我想出来的函数缺少某些我无法看到的东西,并返回:

 [[4;5;6];[6;5;4]]

看起来是这样的:
let revrev lstOfLst = 
    let revrevInner lst = 
        List.fold (fun rst x -> x::rst) [] lst
    List.fold (fun rst x -> x::[(revrevInner x)]) [] lstOfLst 

3
好的,这句话的意思是:“只是好奇,为什么不用 List.rev >> List.map List.rev?”。我的翻译是在保持原意的基础上简化和澄清语言表达,不包含额外解释。 - FoggyFinder
我正努力更好地理解“fold”的使用,但是对于一个简洁的函数来说,你的建议绝对更好。感谢你的贡献! - Khaine775
2个回答

4

仔细阅读我的函数后,我注意到在第一个折叠中没有使用rst。函数应该像这样:

let revrev lstOfLst = 
    let revrevInner lst = 
        List.fold (fun rst x -> x::rst) [] lst
    List.fold (fun rst x -> (revrevInner x)::rst) [] lstOfLst 

2
let revRev lstOfLst =
    List.fold (fun s x -> (List.rev x) :: s) [] lstOfLst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接