Тип этой функции: function :: Num a => ([Char],a) -> ([Char],a)
Мой ввод для этой функции будет примерно таким: (".'*",0)
, и функция найдет первые '.'
или '*'
и обновит a
, добавив 200 или 400 к значению a
в зависимости от того, какой символ был заменен первым. Как только что-то изменяется, остальная часть списка символов добавляется в конец (изменился только один символ). Если главный символ не изменен, обработайте остальную часть списка, но сохраните главный символ.
Я считаю, что первые два защищенных оператора верны, однако я не знаю, как сделать эту функцию рекурсивной, чтобы проверить весь символ в списке без изменений.
function ([], a) = ([], a)
function ((x:xs), a)
| x == '.' = ('-':xs, a+200)
| x =='*' = ('-':xs, a+400)
| otherwise = function(xs, a) --how do I put the unchanged x before xs without processing it?
В основном, когда функция получает в противном случае, мне нужно обработать остаток списка символов, но неизмененные символы также должны быть возвращены.
Примеры желаемого ввода вывода:
Main> function ("./-", 0)
("-/-",200)
или
Main> function ("-/-", 0)
("-/-",0)
Любая помощь очень ценится! Я уточню, если это неясно. Я чувствую, что решаю эту проблему неправильно.