конкатенация - 2 списка - PullRequest
       10

конкатенация - 2 списка

0 голосов
/ 05 декабря 2011

Мне нужна помощь: /

У меня есть список птиц:

xs = [("a",1,[(11,"aa","aa"),(22,"bb","bb")]),("b",2,[(33,"cc","cc"),(44,"dd","dd")])]

И мне нужно сделать функцию, которая позволяет мне изменять значения «a» и 1 (первые 2 значения из первого 3-го кортежа в списке).

Я попытался решить эту проблему, разделив мой список:

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, используя ++ ... Но это не сработает (я считаю, что не могу использовать ++ с сопоставлением с образцом, я прав?)

Любые идеи о том, как я могу объединить xs2 к моей функции newXs? Или любой другой подход к решению проблемы?

Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 05 декабря 2011
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 и добавления его к хвосту.

0 голосов
/ 05 декабря 2011

Вы не можете объединить newXs x y, то есть list, с xs2, то есть tuple.

0 голосов
/ 05 декабря 2011

Ваша проблема с ++.

++ имеет тип [a] -> [a] -> [a]
Другими словами, он берет два списка и «объединяет их»
То, что вы хотите, это добавить a к [a]

Попробуйте
(:) :: a -> [a] -> [a]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...