我想实现这个功能: 做[ EXPR(1), EXPR(2)... EXPR(N), {I,1,J}]
执行expr(k),需要expr(k-1)的结果,因此只需多层do循环就无法实现该功能。如何通过do循环执行该函数?或者通过mathematica中的其他循环?(我还注意到for循环和while循环只能像循环那样支持一个expr)
答案 0 :(得分:2)
尝试用分号而不是逗号分隔。像:
y = 0
Do[y += x; Print[y], {x, 1, 5}]
答案 1 :(得分:1)
Do循环,以及来自命令式编程语言的许多其他控制流构造,几乎总是 是Mathematica编程问题的正确答案。
你没有告诉我们expr
应该计算什么,所以很难提供一个非常一般的答案...所以我将使用阶乘作为一个简单的例子,说明如何编程expr[n]
取决于expr[n-1]
fact[0] = 1
fact[n_] := n*fact[n-1]
在这里,我已经在两个规则中定义了阶乘函数;第一个建立基本情况,第二个建立除0
以外的值的情况。为了避免函数被输入错误数据的情况,我们可能更喜欢像
fact[0] = 1
fact[n_Integer /; n > 0] := n*fact[n-1]
在此版本中,函数fact
只能在正整数或0
上运行。
(注意:对于那些了解Mathematica的人:是的我知道这不是编写阶乘函数的好方法,并且有一个用于计算阶乘的内置函数。但这应该有帮助似乎是一个完全新手的人。)