【发布时间】:2016-11-24 10:59:32
【问题描述】:
我有这个数据类型data List x = LT [(x,[String])]
我一直在尝试创建一个函数,该函数将向List 添加一个新元素。
例如通过使用函数add:
add ('a', ["1","2"]) [('x',["1"])]
结果是:
[('x',["1"]), ('a', ["1","2"])]
顺序是什么并不重要。 试了很多,还是不太明白。
这是我尝试过的
`add:: Ord a => a -> List a -> List a
add _ (LT[]) = empty
add x (LT(y:ys))
| belongs x (LT(y:ys)) = (LT(y:ys))
| otherwise = (LT(y:ys)) ++ (LT(x))`
有人可以帮忙吗? 提前致谢。
【问题讨论】:
-
你不能只用++吗?您已经在定义中使用了 Haskell 列表,因此如果您将
('a', ["1","2"])作为列表提供,例如[('a', ["1","2"])],那么您的函数可以只获取两个列表,使用 ++,并返回一个包含两者的新列表。 hackage.haskell.org/package/base-4.9.0.0/docs/Data-List.html -
@DannyWilson,抱歉,我可能没有正确地提出问题,add 函数接收元素和列表(LT),而不是完全的元组和列表,所以 ++ 不起作用。
-
你的例子应该是
add 'a' [('x', ["1"])]。不过,尚不清楚结果中应该与'a'关联的列表。它只是与前一个最后一个值关联的相同列表,但在末尾添加了一个数字转换字符串吗?