[Haskell-cafe] Efficiency Question

Tom Pledger tpledger at ihug.co.nz
Fri Jan 14 21:33:37 EST 2005


Daniel Fischer wrote:
[snip]

>Another thing, while toying, I found out that a comparison (n <= 0) takes 
>three reductions more than (n < 1) according to my hugs, so changing the 
>definition of splitAt thus, we require (3*n) reductions less.
>

That difference looks like it comes from the default definitions of (<) 
and (<=) in Ord, and the default definition of (/=) in Eq.

There's potential for Hugs to scrounge a little extra performance by 
going straight to case expressions in its Prelude:

    Prelude> 1 >= 0
    True
    (28 reductions, 42 cells)
    Prelude> 1 > 0
    True
    (25 reductions, 39 cells)
    Prelude> let x `gt` y = case x `compare` y of GT -> True; _ -> False 
in 1 `gt` 0
    True
    (23 reductions, 37 cells)
    Prelude> let x `ge` y = case x `compare` y of LT -> False; _ -> True 
in 1 `ge` 0
    True
    (23 reductions, 37 cells)

Regards,
Tom




More information about the Haskell-Cafe mailing list