Re: The uses of Condition (/;)
- To: mathgroup at smc.vnet.net
- Subject: [mg82974] Re: The uses of Condition (/;)
- From: Szabolcs Horvát <szhorvat at gmail.com>
- Date: Mon, 5 Nov 2007 05:05:40 -0500 (EST)
- References: <fghcbl$k9n$1@smc.vnet.net> <fgk9sk$pmk$1@smc.vnet.net>
magma wrote:
> Usage C is described in the Mathematica 6 documentation under Condition - More
> information (and nowhere else I think)
Thanks for the reply!
Yes, that's what I meant by hidden: it's hidden under "More
information". I thought that using /; with Module is completely
different from the other two uses, therefore it would deserve an
explanation at a more prominent place in the documentation.
But Ingolf Dahl's and your examples showed that this is not the
case---in fact, B and C are sub-cases of the same kind of usage. My
confusion came from not realizing that /; has a higher precedence than ;.
Szabolcs
> in the form
>
> lhs:=Module[{vars},rhs/;test]
>
> They say that "this usage allows local variables to be shared between
> test and rhs "
> On the same Documentation page , under Scope, there is a concrete
> example of usage C.
>
> f[x_] := Module[{u}, u^2 /; ((u = x - 1) > 0)]
>
> here it is seen that the pattern (u) is a local variable.
> In your examples you were using x, a global variable, so no difference
> was apparent.
> In C, condition is evaluated before definition, for example (please
> make sure you have Remove[f] before typing this:
>
> f[x_] := Module[{u}, (Print [u]; u^2) /; ((u = x - 1) > 0)]
> f[3]
> 2
> 4
> u only acquires a value after cond is evaluated and then def (Print
> [u]; u^2) will be evaluated.
> A and B are very similar, but A is considered a bit faster, because
> evaluation stops immediately if the cond is not safisfied