Tôi có danh sách sau đây (đó là một danh sách dài 2, nhưng trong nhiệm vụ của tôi, tôi có một chiều dài + n danh sách)“thay thế” 3-tuple
xxs = [(11,22,[(33,33,33),(44,44,44)]),(55,66,[(77,77,77),(88,88,88)])]
Tôi đang cố gắng để “thay thế” một 3-tuple (p1 hoặc p2 hoặc p3 hoặc p4 từ hình bên dưới) theo chỉ mục danh sách (n
) và theo chỉ mục phụ danh sách (p
).
Chức năng, ở cuối, nên như thế:
fooo newtuple n p = (…)
Ví dụ: (thay thế p3 for (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)])]
tôi đã lập kế hoạch mã như sau các bước này:
Truy cập vào pn mà tôi muốn thay đổi. Tôi quản lý để đạt được điều đó bằng cách:
fob n p = ((aux2 xxs)!!n)!!p where aux2 [] = [] aux2 ((_,_,c):xs) = c:aux2 xs
"thay thế" 3 bộ. Tôi rất cần một sự trợ giúp ở đây. Tôi bị kẹt. các mã tốt nhất (trong đầu của tôi nó làm cho một số ý nghĩa) mà tôi đã làm: (nhớ: xin vui lòng không quá xấu trên mã của tôi, tôi đã chỉ được nghiên cứu Haskell chỉ trong 5 tuần)
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
Cuối cùng tôi sẽ đặt tất cả lại với nhau, sử dụng
splitAt
.
Cách tiếp cận của tôi có khắc phục được sự cố không? Tôi thực sự sẽ đánh giá cao một số trợ giúp về bước 2.
Trước hết, lời giải thích của bạn thật đáng chú ý.Thứ hai: Tôi vẫn còn nhiều điều để học, nhưng tôi đã học được rất nhiều câu trả lời của bạn. Thứ ba: Tôi dành một nửa thời gian của mình để giải quyết vấn đề này và bạn sẽ giải quyết nó sau vài phút (tôi thực sự có nhiều điều để học và học). Cuối cùng, cảm ơn BIG! _o_ – Nomics