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?
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With