Ho la seguente lista (si tratta di un elenco di lunghezza 2, ma nel mio incarico ho avere una lunghezza + n elenco)“sostituire” un 3-tuple
xxs = [(11,22,[(33,33,33),(44,44,44)]),(55,66,[(77,77,77),(88,88,88)])]
Sto cercando di “sostituire” uno 3-tupla (p1 o p2 o p3 o p4 dall'immagine qui sotto) per indice di lista (n
) e per indice di sottoelenco (p
).
La funzione, alla fine, dovrebbe essere come:
fooo newtuple n p = (…)
Ad esempio: (sostituire p3 per (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 pianificato il codice come seguendo questi passi:
Accedere al pn che voglio modificare. Riesco a raggiungerlo da:
fob n p = ((aux2 xxs)!!n)!!p where aux2 [] = [] aux2 ((_,_,c):xs) = c:aux2 xs
“sostituire” il 3-tupla. Ho davvero bisogno di aiuto qui. Sono bloccato. il codice migliore (nella mia testa fa un certo senso) che ho fatto: (ricordate: si prega di non essere troppo male il mio codice, ho solo studiato Haskell solo per 5 settimane)
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
Infine, rimetterò tutti insieme, usando
splitAt
.
Il mio approccio al problema è corretto? Apprezzerei davvero qualche aiuto sul passaggio 2.
Prima di tutto, la tua spiegazione è stata davvero notevole.Secondo: ho ancora molto da imparare, ma ho imparato molto con la tua risposta. Terzo: trascorro metà della mia giornata cercando di risolvere questo problema, e lo risolvi in pochi minuti (ho davvero molto da imparare e studiare). Finalmente un GRANDE ringraziamento! _o_ – Nomics