And I think, it is very well-defined. The issue to understand here is that
the case involves scoping rules (unlike Prolog, where basically the only
scope to be noted is that of a single clause). Patterns in case-clauses have
scope locally to that clause (like every other programming language
including Prolog featuring pattern matching).

If you rescan your examples with that in mind, everything ought to make
sense.

All the best
Christian

--
Christian Schulte, http://www.imit.kth.se/~schulte/ 
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Russ Abbott
Sent: Monday, September 26, 2005 9:24 PM
To: [EMAIL PROTECTED]
Subject: case pattern matching


Well, I'll admit to being a bit mind twisted. (Actually I like that state.)
I learned prolog about 2 decades ago and have not kept up with newer
developments.  I think in terms of Edinburgh prolog.  I use setof/3, etc.
(But I don't do asserts.)  But I'm still not convinced that the way case is
defined is the best approach. 

For example, on p 80 in CTM we see that 
local <pattern> = <expression> in ... end
does full unification even though it is not recommended to use it that way.

In
local X in
   case X of 3 then {Browse X} end
   case 3 of X then {Browse X} end
end
the first of these suspends while the second succeeds. And in
local A
   proc {Pair X Y}
      case X of Y then {Browse X#Y} end 
   end
in
   {Pair 3 A} 
   {Pair A 3}
end
both succeed although they give different results: 3#3 and _#_ respectively!
(Why didn't the second call not suspend, and since it didn't suspend, why
didn't it bind Y to 3?)

I still think the semantics of case should be re-analyzed.

-- Russ
_____________________________________________
Russ Abbott
Professor, Computer Science
California State University, Los Angeles
o Check out my blog at http://russabbott.blogspot.com/ 

 
On 9/26/05, Raphael Collet <[EMAIL PROTECTED] > wrote:
Russ Abbott wrote:
> One solution would be to have two versions of the case statement (case
> and caseunify), one that suspends if the pattern aribiter is not 
> completely bound and one that does full unification.

No, this is definitely not a good idea.  Prolog does pattern matching by
*speculative* unification!  It works only because Prolog is *sequential*
and search is built-in.

Oz is concurrent, and search is encapsulated.  The latter makes that we
don't need a "cut" statement in Oz.  Unification is more the functional
style one.

> Not only would 
> that offer a nice feature, it would solve the problem that new-comers
> tend to get confused about this. If both language features were
> presented together in the documentation, there would be no confusion. 

Most newcomers are not from the Prolog world, and many find the "case"
statement quite natural.  Prolog programmers are sometimes a bit
mind-twisted, and need some rehabilitation to normality ;-)  I am sure 
you will quickly get used to Oz.

Cheers,
raph

____________________________________________________________________________
_____
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