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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top