2009-09-23 15 views
6

estoy tratando de crear una lista de Oz usando el siguiente código:¿Cómo creo una lista en Oz?

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 

El Mozart compiler muestra que el código es aceptado, pero sin ventana Examinar se abre. Todo lo que intento hacer es crear una lista en Oz.

¿Qué pasa con el código?

Respuesta

7

No estoy seguro de que eso es lo que quiere, sino para crear una lista de todos los números enteros entre X e Y (ambos inclusive) que podría hacer:

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 
+0

Gracias. De hecho, me encontré con el mismo método. Aunque para devolver una lista adecuada, el segundo argumento para Loop debe ser To | nil para que la lista siempre finalice con un nil. gracias. –

+0

Oh, tienes razón. Está arreglado ahora. – sepp2k

+1

En mi opinión, es más seguro y más lógico hacer 'if From yakoudbz

3

también la razón por la que no recibe cualquier navegador ventana es porque el hilo de evaluación suspender debido a esta línea:

Xs={List.append Xs I} 

Como se mencionó anteriormente una variable sólo se puede asignar una vez, pero hay algo más que está mal en esta línea. Intenta anexar Xs a I pero Xs sigue sin estar vinculado. El hilo se suspende hasta que se asigne un valor a Xs.

Introduce este interactiva:

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

Como ves no pasa nada, no hay ningún navegador abre. A continuación, introduzca la siguiente:

Xs= [1] 

Desde Xs llega a unirse que se desbloquee la primera evaluación "hilo" y el navegador pop-up.

P.S. Lo siento por la respuesta tardía, me acabo de interesar Oz: P

+0

Esto funcionó cuando reemplacé 'List.append' con' Append' – Anand

Cuestiones relacionadas