[英]concatenation - 2 lists
我需要協助 :/
我有很多令人毛骨悚然的清單:
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]
這適用於更改xs1。 我以為使用++,現在可以很容易地將xs2連接到我的newXs函數中了……但是它行不通(我相信我不能使用++ whit模式匹配,對嗎?)
關於如何將xs2連接到newXs函數的任何想法? 或其他解決問題的方法?
提前致謝。
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
創建一個新的元組,並將其添加到尾部,就可以重新組合列表。
您的問題出在++
。
++
的類型為[a] -> [a] -> [a]
換句話說,它需要兩個列表並“將它們放在一起”
您要在[a]
添加一些a
嘗試
(:) :: a -> [a] -> [a]
您不能將newXs xy
(即list
)與xs2
(即tuple
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.