簡體   English   中英

串聯-2個清單

[英]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)模式匹配一​​個列表,該列表的頭部是一個三元素元組,並將該元組中的最后一個元素與列表的尾部綁定。 然后,只需通過給定xy和提取的z創建一個新的元組,並將其添加到尾部,就可以重新組合列表。

您的問題出在++

++的類型為[a] -> [a] -> [a]
換句話說,它需要兩個列表並“將它們放在一起”
您要在[a]添加一些a

嘗試
(:) :: a -> [a] -> [a]

您不能將newXs xy (即list )與xs2 (即tuple

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM