2009-09-23 16 views
6

Próbuję utworzyć listę w Oz stosując następujący kod:Jak utworzyć listę w 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 

Mozart compiler pokazuje, że kod zostanie przyjęty, ale nie otwiera się okno przeglądania. Wszystko, co próbuję zrobić, to stworzyć listę w Oz.

Co jest nie tak z kodem?

Odpowiedz

7

Nie wiesz, że to, co chcesz, ale aby utworzyć listę wszystkich liczb całkowitych między X i Y (włącznie) można zrobić:

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

Dzięki. Właściwie to natknąłem się na tę samą metodę. Chociaż aby zwrócić poprawną listę, drugim argumentem pętli musi być To | nil, aby lista była zawsze zakończona zerem. dzięki. –

+0

Och, masz rację. Naprawiono to teraz. – sepp2k

+1

Moim zdaniem, bardziej bezpieczne i bardziej logiczne jest robienie 'if From yakoudbz

3

również powód, dlaczego nie dostać dowolną przeglądarkę okno to jest ponieważ wątek ocena zawiesić z powodu tej linii:

Xs={List.append Xs I} 

Jak już wcześniej wspomniano zmienna może być przypisany tylko raz, ale jest coś, co jest nie tak z tej linii. Próbujesz dołączyć Xs do I, ale Xs jest wciąż niezwiązany. Wątek zawiesza się w ten sposób, dopóki wartość nie zostanie przypisana do Xs.

Wprowadź ten interaktywnie:

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

Jak widać nic się nie dzieje, nie ma przeglądarka otwiera. Teraz wprowadź to:

Xs= [1] 

Od Xs związaniem się to odblokowuje pierwszej oceny „GW” i przeglądarka będzie pop-up.

P.S. Przepraszam za spóźnioną odpowiedź, właśnie zainteresowałem się Oz: P

+0

To działało, gdy zastąpiłem 'List.append' przez' Append' – Anand

Powiązane problemy