Stephen Tetley stephen.tetley at gmail.com
Wed Mar 10 08:53:32 EST 2010

```Hello all

Algorithmically oddSquareSum is a bit below par though...

> oddSquareSum :: Integer
> oddSquareSum = sum . takeWhile (<10000) . filter odd . map (^2) \$ [1..]

Why filter out the evens after generating them?

> oos1 :: Integer
> oss1 = sum . takeWhile (<10000) \$ map (^2) odds
>   where odds = iterate (+2) 1

Best wishes

Stephen

On 10 March 2010 13:14, Sebastian Fischer <sebf at informatik.uni-kiel.de> wrote:
> On Mar 10, 2010, at 12:21 PM, Ketil Malde wrote:
>
>> Introducing names means that I need to keep the temporary definitions in
>> my
>> head, and I think "takeWhile (<10000)" is as clear as it can get.  And
>> while a name can be misleading (belowLimit is a boolean, no?) or flat
>> out wrong, the definition has its semantics¹.
>
> I agree that composition chains are acceptable (and preferable) if they are
> clear. And I won't argue about wether the example from LYAHFGG is
> sufficiently clear in pointfree style (because I'm biased, to me it is
> certainly clear).
>
> I do not agree that introducing names locally for compositions is *always* a
> bad idea, even if used only once. (Choosing names that are "misleading or
> flat out wrong" is of course always a bad idea.)
>
>> Named values are just like comments
>
> While you wanted to degrade named values by this statement I think it can
> serve as justification. A sensible comment for the example program might be
>
>    -- computes the sum of all odd squares below a certain limit
>
> With the names in the rewritten example this comment is no longer necessary.
> I think only an average Haskell programmer understands the original
> pointfree program as quickly as this comment.
>
> Good names can help making comments less important.
>
> Sebastian
>
> --
> Underestimating the novelty of the future is a time-honored tradition.
> (D.G.)
>
>
>
> _______________________________________________