Come faccio a creare un elenco di Oz?
Domanda
Sto cercando di creare un elenco di Oz utilizzando il seguente codice:
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
Il compilatore Mozart mostra che il codice viene accettato, ma nessuna finestra Sfoglia si apre. Tutto quello che sto cercando di fare è creare una lista in Oz.
Cosa c'è di sbagliato con il codice?
Soluzione
Non sono sicuro che questo è ciò che si vuole, ma per creare una lista di tutti i numeri interi compresi tra X e Y (compreso) si potrebbe fare:
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
Altri suggerimenti
Anche il motivo per cui non si ottiene alcuna finestra del browser è perché il filo di valutazione sospendere a causa di questa linea:
Xs={List.append Xs I}
Come è stato detto in precedenza una variabile può essere assegnato solo una volta, ma c'è qualcos'altro che non va in questa linea.
Si tenta di aggiungere Xs
a I ma Xs
è ancora legato. Il filo sospende quindi fino ad un valore è stato assegnare Xs
.
Inserire questo modo interattivo:
declare Xs in
{Browse {List.append Xs [2 3 4]}}
Come vedete non succede nulla, si apre nessun browser. Ora inserite questo:
Xs= [1]
Dal Xs
è vincolato si sblocca la prima valutazione "filo" e il browser pop-up.
P.S. Ci scusiamo per il ritardo risposta, ho appena ricevuto interessato a Oz: P