im tìm kiếm giải pháp cho lớp Haskell của tôi.Tách danh sách và kiếm tiền từ danh sách con?
Tôi có danh sách các số và tôi cần trả về SUM cho mọi phần của danh sách. Các bộ phận được chia cho 0. Tôi cần sử dụng hàm FOLDL.
Ví dụ:
danh sách ban đầu: [1,2,3,0,3,4,0,5,2,1]
sublist [[1,2,3], [3,4], [5,2,1]]
kết quả [6,7,7]
tôi có một chức năng cho việc tìm kiếm 0 trong danh sách ban đầu:
findPos list = [index+1 | (index, e) <- zip [0..] list, e == 0]
(lợi nhuận [4,6] cho danh sách ban đầu ví dụ)
và chức năng tạo SUM với FOLDL:
sumList list = foldl (+) 0 list
Nhưng tôi hoàn toàn thất bại trong việc đặt nó với nhau:/
---- GIẢI PHÁP CỦA TÔI
Cuối cùng tôi tìm thấy một cái gì đó hoàn toàn khác nhau mà các bạn đề nghị.
Đã cho tôi cả ngày để làm cho nó:/
groups :: [Int] -> [Int]
groups list = [sum x | x <- makelist list]
makelist :: [Int] -> [[Int]]
makelist xs = reverse (foldl (\acc x -> zero x acc) [[]] xs)
zero :: Int -> [[Int]] -> [[Int]]
zero x acc | x == 0 = addnewtolist acc
| otherwise = addtolist x acc
addtolist :: Int -> [[Int]] -> [[Int]]
addtolist i listlist = (i : (head listlist)) : (drop 1 listlist)
addnewtolist :: [[Int]] -> [[Int]]
addnewtolist listlist = [] : listlist
Tôi nghĩ 'kết quả' phải là' [6,7,8] 'thay vì' [6,7,7] '. – Landei