Function 如何从Mathematica中用于初始化数组的函数返回值

Function 如何从Mathematica中用于初始化数组的函数返回值,function,math,wolfram-mathematica,Function,Math,Wolfram Mathematica,在本例中,我试图创建一个长度为5的数组,其中每个元素包含次数。3的总和不超过1。i、 e.3次。所以每个元素都应该包含数字3。这是我的密码: Array[( workingCount = 0; workingSum = 0; done = false; While[! done, workingSum = workingSum + .3; If[workingSum > 1, done = true; workingCount, workingCoun

在本例中,我试图创建一个长度为5的数组,其中每个元素包含次数。3的总和不超过1。i、 e.3次。所以每个元素都应该包含数字3。这是我的密码:

Array[(
  workingCount = 0; 
  workingSum = 0; 
  done = false; 
  While[! done, 
   workingSum = workingSum + .3; 
   If[workingSum > 1, done = true; workingCount, workingCount++]
  ])
  , 5]
在第三行到最后一行,我有
工作计数
,没有
导致返回语句解析的值

相反,我得到的是:

{Null[1], Null[2], Null[3], Null[4], Null[5]}
为什么会发生这种情况?我怎样才能让我的程序做我想做的事情?i、 在传递给数组以初始化其元素的函数的上下文中,如何使用复杂的多行函数


提前谢谢

您的问题来自这样一个事实,即您试图初始化数组,但却试图在没有显式函数调用的情况下进行初始化—这正是您需要做的

有关Mathematica中数组的文档,请参见此处:

除此之外,还有一些小错误(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_] *)
两件事:

首先,在Mathematica中实现这一点的一种方法是

Array[
 Catch[
   workingCount = 0;
   workingSum = 0;
   done = False;
   While[! done,
    workingSum = workingSum + .3;
    If[workingSum > 1,
     done = True; Throw@workingCount,
     workingCount++]]] &,
 5]
第二,也是最重要的:在Mathematica中,你永远不应该这样做!真的


例如,请访问,并阅读那里的问题和答案,以掌握编程风格。

而且,我忘了提到,在您的情况下,您需要返回语句,这就是数组中填充空值的原因。或者,您可以使用@belisarius.Ah建议的匿名函数(与符号),而不是我向您展示的命名函数!我明白你在说什么了,贝里萨利斯。抢手货编辑。