Chaddaï Fouché | 28 Dec 12:28
Picon
Gravatar

Re: what does @ mean?.....

2007/12/28, Nicholls, Mark <Nicholls.Mark <at> mtvne.com>:
> So in the example given...
>
> mulNat a b
>      | a <= b = mulNat' a b b
>      | otherwise = mulNat' b a a
>      where
>           mulNat' x@(S a) y orig
>                   | x == one = y
>                   | otherwise = mulNat' a (addNat orig y) orig
>
> Is equivalent to
>
> mulNat a b
>      | a <= b = mulNat' a b b
>      | otherwise = mulNat' b a a
>      where
>           mulNat' (S a) y orig
>                   | (S a) == one = y
>                   | otherwise = mulNat' a (addNat orig y) orig
>
> ?

Yes, but in the second version, it has to reconstruct (S a) before
comparing it to "one" where in the first it could do the comparison
directly. In this cas there may be some optimisation involved that
negate this difference but in many case it can do a real performance
difference.
The "as-pattern" (@ means as) is both practical and performant in most cases.

--

-- 
Jedaï

Gmane