Thanks Yves for pointing out a realistic use case of the bang operator. I finally understand its purpose.

Ed

On 5/7/06, Yves Jaradin < [EMAIL PROTECTED]> wrote:
Anthony Borla wrote:

>Greetings,
>
>Playing around with nested loops, for example, to iterate through a list of
>cells:
>
>    for rec(x:Xo y:Yo) in TheList do
>        ...
>        for rec(x:X y:Y) in {List.drop TheList @Idx} do
>        ...
>            TX := @Xo + @X
>            TY := @Yo + @Y
>        ...
>        end
>    end
>
>The above code works fine since different variable names are used in each
>loop. I would have thought, though, that the '!' operator would have allowed
>the following usage:
>
>    for rec(x:X y:Y) in TheList do
>        ...
>        for rec(x:X y:Y) in {List.drop TheList @Idx} do
>        ...
>            TX := @!X + @X
>            TY := @!Y + @Y
>        ...
>        end
>    end
>
>that is, allow selective exposure of same-name outer-scope variables so that
>both outer-loop and inner-loop variables could be referenced using the same
>name. My attempts in using this approach have failed, so am wondering
>whether I have misunderstood the use of the '!' operator, or am otherwise
>doing something wrong.
>
>Cheers,
>
>Anthony Borla
>
>
>_________________________________________________________________________________
>mozart-users mailing list                               [email protected]
>http://www.mozart-oz.org/mailman/listinfo/mozart-users
>
>
The bang is not an outer-scope operator. It is just a way to prevent
introduction of a new variable. In essence its meaning is : "I really
want to use the variable with that name, not create a new variable
hiding it." The most common use of bang is in pattern-matching against
names:

Secret={NewName}

case Message
of wellKnown then ...
[] !Secret then ...
[] AnythingElse then ...
end

Without the bang, the second case would always match and introduce a
variable Secret local to the second clause.

Yves

_________________________________________________________________________________
mozart-users mailing list                               [email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users

_________________________________________________________________________________
mozart-users mailing list                               
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users

Reply via email to