Haskell рекурсивно применяет функцию к каждому элементу, но сначала? - PullRequest
0 голосов
/ 16 января 2019

Итак, я делал эту программу, которая получает функцию f, число a и список b, и она должна возвращать список [a, f(a,b), f(f(a,b),b, ..], повторяющийся в списке b и использующий рекурсию. Ребята, вы знаете, как я могу оптимизировать свой код?

calculate :: (a -> b -> a) -> a -> [b] -> [a]
help :: (a -> b -> a) -> a -> [b] -> [a]

help f a (x:xs) = (f a x) : (calculate f (f a x) xs)
help f a [] = []

calculate f a b = a : (help f a b)

1 Ответ

0 голосов
/ 16 января 2019

calculate f a b = tail . concatMap (replicate 2) . scanl f a $ b.

Возможно, бит репликации ошибочен. Если это так, то просто calculate = scanl.

Это переводит код, поскольку «[a, f(a,b), f(f(a,b),b, ..]» из текста противоречит ему (и это противоречит самому тексту, что говорит об «итерации» - списка b ").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...