[Haskell-cafe] Re: Haskell performance (again)!
Jón Fairbairn
jon.fairbairn at cl.cam.ac.uk
Tue Oct 10 05:18:52 EDT 2006
"Brian Hulley" <brianh at metamilk.com> writes:
> Lennart Augustsson wrote:
> > I think your first try looks good.
> [snip]
> > ...
> > addPoly1 p1@(p1h@(Nom p1c p1d):p1t) p2@(p2h@(Nom p2c p2d):p2t)
> > | p1d == p2d = Nom (p1c + p2c) p1d : addPoly1 p1t p2t
> > | p1d < p2d = p1h : addPoly1 p1t p2
> > | p1d > p2d = p2h : addPoly1 p1 p2t
> > ...
>
> The last comparison is redundant (this was in the original
> version too) because p1d > p2d is implied (certainly for
> this case where p1d, p2d::Int) by the fall through from not
> satisfying == and < so how about:
>
> addPoly1 p1@(p1h@(Nom p1c p1d):p1t) p2@(p2h@(Nom p2c p2d):p2t)
> | p1d == p2d = Nom (p1c + p2c) p1d : addPoly1 p1t p2t
> | p1d < p2d = p1h : addPoly1 p1t p2
> | otherwise = p2h : addPoly1 p1 p2t
Surely all but one of the comparisons is unnecessary? If you
use `compare` instead of (==) and friends, won't one do (I'm
assuming that the compiler can convert cases on LT, EQ and
GT into something sensible -- after all, wasn't that the
purpose of compare?)?
--
Jón Fairbairn Jon.Fairbairn at cl.cam.ac.uk
http://www.chaos.org.uk/~jf/Stuff-I-dont-want.html (updated 2006-09-13)
More information about the Haskell-Cafe
mailing list