只是好奇Mathematica用户在遇到运行时错误时如何调试其代码。 我觉得Mathematica功能非常强大,大多数编程任务都可以用 代替,但是如果它有缺陷,调试的不便将抵消它的优点。Mathematica调试
我知道Workbench,但启动起来很麻烦,而且它的基于Java的IDE编译起来有点慢。
只是好奇Mathematica用户在遇到运行时错误时如何调试其代码。 我觉得Mathematica功能非常强大,大多数编程任务都可以用 代替,但是如果它有缺陷,调试的不便将抵消它的优点。Mathematica调试
我知道Workbench,但启动起来很麻烦,而且它的基于Java的IDE编译起来有点慢。
Trace和TracePrint都可以得心应手。我也喜欢来界定“任何说法”的定义来警告我不确定调用,如
f[0] := 1
f[1] := 1
f[n_Integer?Positive] := (f[n]=f[n-1]+f[n-2])
f[wrong___] := (Print["f had wrong arguments: ",{wrong}]; $Failed)
当工作台,这些错误定义断点的好地方。
具有特定参数的跟踪(这个函数通过了什么等)是一个有用的工具。然而,最通用的方法是立即评估工作笔记本中的代码片段,找到第一个地方发生的事情,您没有预料到或者不在包装代码需要的形状中。这也有助于如果你从头开始编写模块化代码。
回声函数现在内置,并在跟踪发生错误时非常有用。
"Echo[x_]:=Module[{},Print[x];x]"
为了说明:查找列表中的元素等于y的数量,取模4
input = [email protected];
target = 3;
foobar[list_, y_] := [email protected][list, y == Mod[4, #] &]
foobar[input, target]
,则返回0,尽管存在是在工作范围内的多个号码之后。 修改foobar的使用回声调试:
foobar[list_, y_] := [email protected][list, y == Echo[Mod[4, #]] &]
将迅速表明国防部的论点是向后从预期的效果。