Thanks for explanation . Though i am little disappointed that book/ch2 does not
explain the mechanism or the meaning of match in context of case.
It is not clear exactly how does the match in case works.
It seems in a naive way that in "case <x> of <z> .." it tries to bind
<x> to <z> and if it does successfully then the match occurs otherwise
not.
Also it is clear that the "case <x> of <z> .." is not equivalent to
"if <x>==<z> .."
Thanks for your help.
On Thu, Oct 23, 2008 at 11:59 PM, Emre Sevinc <[EMAIL PROTECTED]> wrote:
>> Now consider this fragment taken from exercise 5 on page 107-108 :
>>
>> local Test in
>> proc {Test X}
>> case X
>> of '|'(1:a 2:Z) then {Browse 'case'(1)}
>> [] f(a) then {Browse 'case'(2)}
>> [] Y|Z andthen Y==Z then {Browse 'case'(3)}
>> [] Y|Z then {Browse 'case'(4)}
>> [] f(Y) then {Browse 'case'(5)}
>> else {Browse 'case'(6)} end
>> end
>> {Test [b c a]}
>> end
>>
>> Produces the answer 'case(4)' i.e clause [] Y|Z then {Browse 'case'(4)}
>>
>> But {Label [b c a]} is '|' and {Label '|'(1:a 2:Z)} is also '|'
>> And {Arity [b c a]} is [1 2] and {Arity '|'(1:a 2:Z)} is also [1 2]
>>
>> So why it is not selecting the first clause?
>
> Because it reads: of '|'(1:a 2:Z) then {Browse 'case'(1)} which means
> the element should match a pattern whose label is '|' *and* whose
> first element is 'a' and whose third element will be anything which
> can be united with unbound variable Z.
>
> So, yes [b c a]'s label is '|' but its first element is 'b', not 'a'.
>
> And thus it matches the fourth case which is the Y|Z pattern which
> means anything with a '|' label *and* whose first element can be bound
> to the unbound variable Y and whose rest can be bound to Z; [b c a]
> matches this pattern (and be careful, not the third case because Y is
> not == Z).
>
> That's my comment as another Oz newbie who is reading the same book :)
>
> Cheers,
>
> --
> Emre Sevinc
>
> Lecturer @ Istanbul Bilgi University Computer Science Department
> Coordinator @ IBM Center for Advanced Studies Lab.
>
> http://cs.bilgi.edu.tr/~emres/
> http://cs.bilgi.edu.tr
> http://cas.bilgi.edu.tr/cms/
> _________________________________________________________________________________
> 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