У меня есть следующий список (это список длины 2, но в моем задании у меня список длины +n)
xxs = [(11,22,[(33,33,33),(44,44,44)]),(55,66,[(77,77,77),(88,88,88)])]
Я пытаюсь "заменить" один 3-кортеж (p1 или p2 или p3 или p4 с картинки ниже) по индексу списка (n
) и по индексу подсписка (p
).
Функция в конце должна выглядеть так:
fooo newtuple n p = (…)
Например: (заменить p3 на (98,98,98):
fooo (98,98,98) 2 1
[(11, 22, [(33,33,33) , (44,44,44)]) , (55, 66, [(98,98,98),(88,88,88)])]
Я спланировал код следующим образом:
Получите доступ к pn, который я хочу изменить. Мне удалось добиться этого следующим образом:
fob n p = ((aux2 xxs)!!!n)!!!p
где aux2 [] = []
aux2 ((_,_,c):xs) = c:aux2 xs
"заменить" 3-кортеж. Мне очень нужна помощь. Я застрял. Лучший код (в моей голове он имеет какой-то смысл), который я сделал: (помните: пожалуйста, не будьте слишком плохи к моему коду, я изучаю Haskell всего 5 недель)
foo n p newtuple = fooAux newtuple fob
где fooAux _ [] = []
fooAux m ((_):ds) = m:ds
fob n p = ((aux2 xxs)!!!n)!!!p
где aux2 [] = []
aux2 ((_,_,c):xs) = c:aux2 xs
Наконец, я соберу все вместе, используя splitAt
.
Правилен ли мой подход к решению проблемы? Я был бы очень признателен за помощь по шагу 2.