I understand that higher-order functions  are incredibly powerful, and that you can do essentially anything you might ever want while using only 'map' and 'foldl'.

However,  I have trouble believing that even experienced programmers wold find such HOF-oriented code to be more readable than Mr Akgun's solution:

foo :: (a -> a -> a) -> [a] -> [a]
foo f (x:y:rest) = f x y : foo f (y:rest)
foo f _ = []

It seems to me that 'foo', as defined here, is a direct restatement of the original program specification (the english one).  Basically no translation required.

If anyone here is enough of a veteran to prefer a map/fold implementation of this spec,  I would be interested to hear about the thought processes you undertake when writing such code.  

Thanks.

On Thu, Apr 29, 2010 at 10:22, David Virebayre <dav.vire+haskell@gmail.com> wrote:
On Thu, Apr 29, 2010 at 3:52 PM, jean verdier <verdier.jean@gmail.com> wrote:
> I may have missed it in this thread, but if not, why didn't anyone
> suggest:
>
> trans []         = []
> trans [x]        = [x]
> trans ('a':_:xs) = 'a' : 'A' : trans xs
> trans     (x:xs) =        x  : trans xs

While as a beginner (I still am !) I would come up with a solution
like this one, on the long run it helps trying to solve those problem
with maps, folds, filters, and zips: Eventually, you'll find the code
more readable, easier to write,  and there's perhaps a better chance
that it can be optimised by ghc.

David.
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners



--
mac