Я хочу сделать что-то вроде:Исчисление внутри рекурсивной функции
>enumerate ["banana", "potato", "ice"]
[(1, "banana"), (2, "potato"), (3, "ice")]
Я писал:
enumerate :: [String] -> [(Int, String)]
enumerate [] = []
Как я могу контролировать/управлять INT счетчик? Есть ли способ сделать это без поддержки?
Обновление: Я знаю о Zip Функция. Но для изучения вопроса я хочу реализовать свою собственную функцию zip.
Update 2: В настоящее время Кодекс
Это то, что я сделал до сих пор, используя функцию поддержки. Учитывая это:
1) Я хочу реализовать свою собственную функцию zip
;
2) Я не хочу, чтобы изменить функцию:-структуру
enumerate :: [String] -> [(Int, String)]
enumerate :: [String]->[(Int,String)]
enumerate [] = []
enumerate list = aux 1 list
aux :: Int->[String]->[(Int, String)]
aux _ [] = []
aux i (x:xs) = [(i, x)] ++ aux (i+1) xs
Можно ли улучшить эту функцию? Поскольку я не хочу добавлять еще одну функцию к функции, я думаю, что функция поддержки - единственный способ пойти, правильно?
Последний 'aux' выглядит хорошо. Для стиля я бы изменил '[(i, x)] ++ ...' на '(i, x): ...'. – chi
вам не нужно 'enumerate [] = []', поскольку вы уже обрабатываете пустые списки в 'aux'. На самом деле вы можете просто написать 'enumerate = aux 1' – homam
@homam и как функция aux распознает список? И Спасибо, что это сработало хорошо. Я думал, что могу просто использовать ':' в 'elem: list' – PlayHardGoPro