Mam następujący list (jest to lista długość 2, ale w moim przypisania mam długość + n lista)„zastąpić” 3-krotka
xxs = [(11,22,[(33,33,33),(44,44,44)]),(55,66,[(77,77,77),(88,88,88)])]
próbuję „zastąpić” jeden 3-krotnie (p1 lub p2 lub p3 lub p4 z obrazu poniżej) według indeksu listy (n
) i według indeksu spisu podrzędnego (p
).
tę funkcję, w tym celu, powinna być jak:
fooo newtuple n p = (…)
Na przykład: (wymienić P3 dla (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)])]
I Zaplanowano kod, wykonując następujące czynności:
Uzyskaj dostęp do parametru pn, który chcę zmienić. Udaje mi się to osiągnąć przez:
fob n p = ((aux2 xxs)!!n)!!p where aux2 [] = [] aux2 ((_,_,c):xs) = c:aux2 xs
"Zamień" 3-tkę. Naprawdę potrzebuję tutaj pomocy. Utknąłem. najlepszy kod (w mojej głowie to ma jakiś sens), który zrobiłem: (pamiętaj: nie bądź taki zły na moim kodzie, uczę się tylko Haskella tylko przez 5 tygodni)
foo n p newtuple = fooAux newtuple fob where fooAux _ [] = [] fooAux m ((_):ds) = m:ds fob n p = ((aux2 xxs)!!n)!!p where aux2 [] = [] aux2 ((_,_,c):xs) = c:aux2 xs
Wreszcie odłożę wszystko razem, używając
splitAt
.
Czy moje podejście do problemu jest prawidłowe? Naprawdę byłbym wdzięczny za pomoc w kroku 2.
Po pierwsze, twoje wyjaśnienie było naprawdę niezwykłe.Po drugie: wciąż mam wiele do nauczenia się, ale wiele nauczyłem się z twoją odpowiedzią. Po trzecie: spędzam połowę dnia próbując rozwiązać ten problem, a ty rozwiązujesz go w ciągu kilku minut (naprawdę muszę dużo się uczyć i studiować). Wreszcie, wielkie dzięki! _o_ – Nomics