Oz and Mozart Users Mailing List

Re: "for" question (newbie)


From: Denys Duchier (Denys.Duchier@ps.uni-sb.de)
Date: Thu Sep 12 2002 - 21:06:43 CEST


bspight@pacbell.net (Bill Spight) writes:

> for
> X in L
> Y in {Tail L}
> do
> (X<Y)=true
> end
>
> L is a list of integers (not necessarily instantiated).
>
> At first glance, and upon checking the documentation, it seems like the
> loop should traverse the cartesian product of L and its tail.

I don't know where you got this idea. "Upon checking the documention",
ahem, you'll find (in the document "Loop Support"):

      In order to provide convenient syntax for loops, two new
      keywords have been introduced in Mozart 1.1.0: for and do. Thus,
      a new statement is introduced in the Oz language and its syntax
      is:

                for Declarations do ... end

      where Declarations is a sequence of 0 or more iterator and
      feature declarations. An iterator has the form: Pat in Generator
      where Generator describes how to generate the successive values
      for pattern Pat whose variables are local to the loop. The
      generators are stepped in parallel and the loop terminates as
      soon as one of the generators runs out of values.

Notice the sentence "generators are stepped in parallel" :-) I
actually added this sentence at Joachim's request to attempt to remove
a possible ambiguity. I guess I failed :-(

Here is the scoop. Consider the following loop:

        for
           X in [a b c]
           Y in [1 2 3 4]
        in
           ...
        end

Here is what happens on each iteration:

        Iteration 1: X=a Y=1
        Iteration 2: X=b Y=2
        Iteration 3: X=c Y=3

then the generator for X runs out of values, which causes the loop to
terminate. Maybe, that's what I should put in the documentation.

Cheers,

-- 
Dr. Denys Duchier			Denys.Duchier@ps.uni-sb.de
Forschungsbereich Programmiersysteme	(Programming Systems Lab)
Universitaet des Saarlandes, Geb. 45	http://www.ps.uni-sb.de/~duchier
Postfach 15 11 50			Phone: +49 681 302 5618
66041 Saarbruecken, Germany		Fax:   +49 681 302 5615
-
Please send submissions to users@mozart-oz.org
and administriva mail to users-request@mozart-oz.org.
The Mozart Oz web site is at http://www.mozart-oz.org/.



This archive was generated by hypermail 2b29.