1

この例では、長さ 5 の配列を作成しようとしています。各要素には、1 を超えずに .3 を合計できる回数が含まれています。つまり、3 回です。したがって、各要素には番号 3 が含まれている必要があります。これが私のコードです。

Array[(
  workingCount = 0; 
  workingSum = 0; 
  done = false; 
  While[! done, 
   workingSum = workingSum + .3; 
   If[workingSum > 1, done = true; workingCount, workingCount++]
  ])
  , 5]

最後から3行目では、Mathematicaではステートメントが解決する値が返される原因を省略しているように見えるためworkingCount、後にはありません。;;

代わりに私はこれを得る:

{Null[1], Null[2], Null[3], Null[4], Null[5]}

なぜこれが起こるのですか?プログラムにやりたいことをさせるにはどうすればよいですか? つまり、配列に渡されて要素を初期化する関数のコンテキストでは、複雑な複数行の関数を使用するにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

2

2つのこと:

まず、Mathematica でそれを行う方法の 1 つは、次のとおりです。

Array[
 Catch[
   workingCount = 0;
   workingSum = 0;
   done = False;
   While[! done,
    workingSum = workingSum + .3;
    If[workingSum > 1,
     done = True; Throw@workingCount,
     workingCount++]]] &,
 5]

2番目に、そして最も重要なことですが、Mathematica では絶対にそうすべきではありません! 本当。

たとえば、Mathematica の Stack Exchange サイトにアクセスし、そこにある質問と回答を読んでプログラミング スタイルを把握してください。

于 2012-10-09T05:13:13.263 に答える
1

あなたの問題は、配列を初期化しようとしているが、明示的な関数呼び出しなしでそうしようとしているという事実から来ています-これはあなたがする必要があることです.

Mathematica の配列に関するドキュメントについては、こちらを参照してください: http://reference.wolfram.com/mathematica/ref/Array.html

それはさておき、小さなエラー (True と False は大文字にする必要があります)、これがあなたがしたいことです:

f[x_] :=
  (
   workingCount = 0;
   workingSum = 0;
   done = False;

   While[done != True, workingSum = workingSum + 0.3; 
    If[workingSum > 1, done = True, workingCount++]
    ];
   Return[workingCount];
   );

Array[f, 5] (* The array here is generating 5 values of the return value of f[x_] *)
于 2012-10-09T05:12:37.110 に答える