繁体   English   中英

如何在 Haskell 中反转嵌套列表

[英]How can I reverse a nested list in Haskell

我正在尝试反转类似于(A,B,(C,(D,E)),F)以在 haskell 中返回类似(F,((E,D),C),B,A)的内容。 我知道如何返回单个列表:

rev :: [a] -> [a]
rev [] = []
rev (x:xs) = (rev xs) ++ [x]

但是我将如何处理嵌套列表?

一个可能的实现如下:

data Tree a = Leaf a | Node [Tree a] deriving (Eq, Show)

rev (Leaf x)  = Leaf x
rev (Node xs) = Node (go (reverse xs)) where
  go ((Leaf y):ys) = Leaf y: go ys
  go ((Node y):ys) = rev (Node y): go ys
  go []            = []

一个简短的测试:

λ> tree = Node [Leaf 'A', Leaf 'B', Node [Leaf 'C', Node [Leaf 'D', Leaf 'E']]]
λ> rev tree
Node [Node [Node [Leaf 'E',Leaf 'D'],Leaf 'C'],Leaf 'B',Leaf 'A']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM