List 在haskell中追加自定义数据类型
我正在使用数据类型模拟异构列表:List 在haskell中追加自定义数据类型,list,haskell,append,List,Haskell,Append,我正在使用数据类型模拟异构列表: data Nested a = Elem a | List [Nested a] deriving (Show) 这样我就可以表达像List[Elem 1,Elem 2,List[Elem 3,Elem 4],List[Elem 5],Elem 6]这样的数据 在这里,我编写了一个类似于普通append函数的函数,用于连接异构列表: appendn :: Nested a -> Nested a -
data Nested a = Elem a | List [Nested a]
deriving (Show)
这样我就可以表达像List[Elem 1,Elem 2,List[Elem 3,Elem 4],List[Elem 5],Elem 6]这样的数据
在这里,我编写了一个类似于普通append函数的函数,用于连接异构列表:
appendn :: Nested a -> Nested a -> Either String (Nested a)
appendn (Elem a) (List x) = Left "error: wrong argument"
appendn (List x) (Elem a) = Left "error: wrong argument"
appendn (List []) (List x) = Right (List x)
appendn (List (x:xs)) (List y) = Right (List (x:appendn (List xs) (List y))
但我总是在最后一行得到一个解析错误。我想知道是否可以在这里使用:运算符来附加列表。有人能帮忙吗?谢谢。数一数左括号和右括号。它们匹配吗?除了父项不匹配之外,还有一个类型错误。不能将:函数与List参数一起使用,必须将其解包 顺便说一句,为什么不直接使用++函数?有几点: 您缺少一个案例:如果两个参数都在Elem中 您的函数将生成嵌套的字符串,但在最后一种情况下,定义为: 。。。 附录列表x:xs列表y=右侧列表x:附录列表xs列表y 在这里,我们试图限制:一个值x::嵌套在一个非列表appendn list xs list y::嵌套的字符串a 势解 以下是一些测试用例:
$ appendn (Elem 2) (Elem 3)
= Left "error: wrong argument"
$ appendn (List [Elem 1]) (Elem 2)
= Left "error: wrong argument"
$ appendn (Elem 2) (List [Elem 1])
= Left "error: wrong argument"
$ appendn (List [Elem 1, Elem 2]) (List [])
= Right (List [Elem 1,Elem 2])
$ appendn (List [Elem 1, Elem 2]) (List [Elem 3, Elem 4])
= Right (List [Elem 1,Elem 2,Elem 3,Elem 4])
在这里使用“或”和“可能”有什么不同
希望这有帮助 这个问题似乎给很多人带来了麻烦:谢谢Liam,这真的很有帮助。我只是更熟悉这里的任何一个,我不太了解可能。也许这是一个更好的选择。谢谢
$ appendn (Elem 2) (Elem 3)
= Left "error: wrong argument"
$ appendn (List [Elem 1]) (Elem 2)
= Left "error: wrong argument"
$ appendn (Elem 2) (List [Elem 1])
= Left "error: wrong argument"
$ appendn (List [Elem 1, Elem 2]) (List [])
= Right (List [Elem 1,Elem 2])
$ appendn (List [Elem 1, Elem 2]) (List [Elem 3, Elem 4])
= Right (List [Elem 1,Elem 2,Elem 3,Elem 4])