6

次のコードを使用して、 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コンパイラは、コードが受け入れられたことを示していますが、参照ウィンドウは開きません。私がやろうとしているのは、Ozでリストを作成することだけです。

コードの何が問題になっていますか?

4

2 に答える 2

7

それがあなたの望むものかどうかはわかりませんが、XとY(両端を含む)の間のすべての整数のリストを作成するには、次のようにすることができます。

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
于 2009-09-26T21:50:04.787 に答える
4

また、ブラウザウィンドウが表示されない理由は、次の行が原因で評価スレッドが一時停止するためです。

Xs={List.append Xs I}

前に述べたように、変数は1回しか割り当てることができませんが、この行には他に問題があります。Xsあなたは私に追加しようとしますが、Xsそれでもバインドされていません。したがって、スレッドは、値がに割り当てられるまで中断しXsます。

これをインタラクティブに入力します。

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

何も起こらないので、ブラウザは開きません。今これを入力してください:

Xs= [1]

バインドされると、Xs最初の評価「スレッド」のロックが解除され、ブラウザがポップアップ表示されます。

PS遅い答えで申し訳ありませんが、私はちょうどオズに興味を持った:P

于 2010-01-01T17:29:57.847 に答える