我需要一些帮助:/
我有个养鸡名单:
xs = [("a",1,[(11,"aa","aa"),(22,"bb","bb")]),("b",2,[(33,"cc","cc"),(44,"dd","dd")])]我还需要创建一个函数来更改"a“和1的值(列表中第一个三元组的前两个值)。
我试图通过拆分我的列表来解决这个问题:
xs1 = ("a",1,[(11,"aa","aa"),(22,"bb","bb")])
xs2 = ("b",2,[(33,"cc","cc"),(44,"dd","dd")])然后:
changeXs (_, _, z) x y = (x,y,z)
newXs x y = [changeXs xs1 x y]这适用于change xs1。我认为现在使用++将xs2连接到我的newXs函数应该很容易。但是它不能工作(我相信我不能使用带有模式匹配的++,对吗?)
关于如何将xs2连接到newXs函数,有什么想法吗?或者任何其他解决问题的方法?
提前谢谢。
发布于 2011-12-06 00:08:18
insert_new_xy x y ((_, _, z) : rest) = (x, y, z) : rest测试:
*Main> insert_new_xy "foo" 42 xs
[("foo",42,[(11,"aa","aa"),(22,"bb","bb")]),("b",2,[(33,"cc","cc"),(44,"dd","dd")])]((_, _, z) : rest)模式匹配一个列表,该列表的头部是一个由三个元素组成的元组,并将该元组中的最后一个元素与列表的尾部绑定。然后,只需重新组合列表,使用给定的x、y和提取的z创建一个新的元组,并将其添加到尾部。
发布于 2011-12-06 00:27:08
你的问题出在++上。
++的类型为[a] -> [a] -> [a]
换句话说,它接受两个列表并将它们“放在一起”
您想要的是向[a]添加一些a
试一试
(:) :: a -> [a] -> [a]
发布于 2011-12-06 01:39:26
不能将newXs x y (即list )与xs2 (即tuple )连接在一起。
https://stackoverflow.com/questions/8388102
复制相似问题