2

我已经定义了一些 arity 1 的函数,比如func1(-)func2(-)。我已经对它们进行了测试,发现它们实际上做了他们应该做的事情。

我希望定义第三个函数,比如func3(-),输出 和 的func1(-)差异func2(-)。这就是我所做的

func3(k) = {j=func1(k)-func2(k); print(j)}

然而,它并没有返回它应该返回的东西。让我们假设func1(5)输出 10 和func2(5)输出 2。那么,func3(5)应该输出 8,对吗?相反,它返回func1(5)一行中的输出,func2(2)另一行中的输出,然后返回零(即使相应输出的差异不是 0)。

你知道 的定义有什么问题func3(-)吗?

4

1 回答 1

5

GP 用户函数返回最后评估的值。在这里,它是 'print(j)' 命令的结果,它打印 j(副作用)并返回 'void',当必须给它一个值时,它被类型转换为 0,就像这里一样。

f1(x) = 10
f2(x) = 2
f3(x) = f1(x) - f2(x)

正确返回 8。您没有提供 func1 / func2 函数的代码,但我希望您包含一个“打印”语句,也许希望它返回一个值。这就是为什么您在 0 之前的不同行上获得输出的原因。

如果您不喜欢这种“return-last-evaluation-result”行为,您可以使用显式的“return (result)”语句。

于 2013-04-05T15:24:34.790 回答