0

OZ モーツァルトは初めてです。三角形のシーケンスを書き込もうとしていますが、プログラミングがうまくいきません。

declare
fun {Sequence N R}
   fun {Help I}
      if I < N
     sum = {Int.toFloat(N*(N+1)/2.0)}
     %I + 1
     case R of nil then {Append [sum] nil}
     [] H|T then sum|H|T
     end
     I+1
      end
   end
in
   {Help 0}
end

declare
{Browse {Sequence 5 nil}}

私のプログラミングに何か問題がある場合は?次のようなエラーが表示されます。

%*************************** parse error ************************
%**
%** syntax error, unexpected T_end, expecting T_then
%**
%** in file "c:/Users/admin/Desktop/test (2).oz", line 11, column 6
%** ------------------ rejected (1 error)

それについて何か考えはありますか?ありがとうございました

4

1 に答える 1

0

三角シーケンスとは何かをよく理解していれば、次の簡単な実装になります。しかし、まず第一に、エラーは、ステートメントでthenキーワードを使用する必要があることを意味します。iffloat から int への型変換は必要ありません。後続の数値を乗算すると奇数になるからです。これにより、変数の管理が簡素化されます。これが私が提案するものです:

declare

fun {Sequence N}
   local X in
     if N>0 then
      X = (N*(N+1) div 2)
      X|{Sequence N-1}
     else nil
     end
    end
 end

{Browse {Sequence 5}} 

これは単なる例です。逆の順序で三角形のシーケンスが得られます。必要に応じて簡単に修正できます。

于 2016-10-18T12:17:35.127 に答える