Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I create a list in Oz?

Tags:

oz

mozart

I'm trying to create a list in Oz using the following code:

local Loop10 Xs in
   proc {Loop10 I}
      Xs={List.append Xs I}
      if I == 10 then skip
      else
     {Browse I}
     {Loop10 I+1}
      end
      {Browse Xs}
   end
{Loop10 0}
end

The Mozart compiler shows that the code is accepted, but no Browse window opens up. All I'm trying to do is create a list in Oz.

What's wrong with the code?

like image 909
el diablo Avatar asked Sep 23 '09 01:09

el diablo


2 Answers

Not sure that that's what you want, but to create a list of all whole numbers between X and Y (inclusive) you could do:

local
   fun {Loop From To}
      if From > To
      then nil
      else From | {Loop From+1 To}
      end
   end
in
   {Browse {Loop 0 10}} % Displays: [0,1,2,3,4,5,6,7,8,9,10]
end
like image 137
sepp2k Avatar answered Nov 15 '22 18:11

sepp2k


Also the reason why you don't get any browser window is because the evaluation thread suspend due to this line:

Xs={List.append Xs I}

As it was previously mentioned a variable can only be assigned once but there is something else that is wrong with this line. You attempt to append Xs to I but Xs is still unbound. The thread thus suspends until a value has been assign to Xs.

Enter this interactively:

declare Xs in
{Browse {List.append Xs [2 3 4]}}

As you see nothing happens, no browser opens. Now enter this:

Xs= [1]

Since Xs becomes bound it unlocks the first evaluation "thread" and the browser will pop-up.

P.S. Sorry for the late answer, I just got interested in Oz :P

like image 43
JFT Avatar answered Nov 15 '22 18:11

JFT