Если вы хотите использовать map
для решения этой проблемы, вы можете сделать что-то вроде этого:
Иметь функцию, которая получает int и возвращает список из 2 элементов с int и нулем:
addZero :: List
addZero a = [0, a]
Затем вы можете вызвать карту с помощью этой функции:
x = map addZero [1..20] -- this will return [[0,1], [0, 2] ...]
Вы заметите, что это вложенный список. Так работает map
. Нам нужен способ объединить внутренний список в один список. В этом случае мы используем foldl
combineList :: [[Int]] -> [Int]
combineList list = foldl (++) [] list
-- [] ++ [0, 1] ++ [0, 2] ...
Таким образом, в этом случае работа foldl заключается в том, что он принимает функцию объединения, начальное значение и список для объединения.
Поскольку первые 0 нам не нужны, мы можем отбросить их:
dropFirst :: [Int] -> [Int]
dropFirst list = case list of
x:xs -> xs
[] -> []
Окончательный код:
x = dropFirst $ combineList $ map addZero [1..20]
addZero :: Int -> [Int]
addZero a = [0, a]
combineList :: [[Int]] -> [Int]
combineList list = foldl (++) [] list
dropFirst :: [Int] -> [Int]
dropFirst list = case list of
x:xs -> xs
[] -> []