惰性求值主要用于函数式编程语言,而 MATLAB 是基于过程/OOP 的。因此,SetDelayed
不存在等效的 。正如 Amro 已经指出的那样,如果您尝试使用已演示的匿名函数,它将无法工作。
但是,如果您可以访问符号计算工具箱,则可以使用可以被视为等效的东西:=
(如果您问我,这是一个脆弱的等价物)。这是一个例子:
syms x y z; %#Declare x, y and z as symbolic variables
x=y+2; %#Define some value for x
f=@(x)x.^2; %#Define an anonymous function.
f(x)
ans =
(y + 2)^2
%#Check with z
f(z)
ans =
z^2
您可以看到它使用 的实际定义,并且没有像在您的数值示例中那样f
捕获 的定义。x
您还可以更改x
to say的定义x=1/y
,f(x)
现在将使用 的当前定义x
。请注意,这f
只是一个函数句柄,将采用数字/符号参数。例如,
f(1:5)
ans =
1 4 9 16 25
它不相似的部分是它仅对:=
表达式中存在的术语应用定义并且没有更深入(即,它不评估可能由于第一个结果而出现的不同变量集的定义评估)。这并不奇怪,因为 MATLAB 不是基于规则的语言。为了说明我的观点:
y=z^3; %#Define y
f(x)
ans =
(y + 2)^2 %#The definition for y is not used.
而 Mathematica 会给你(z^3+2)^2
。
Clear[y, z, x, f]
f[x_] := x^2;
y := z^3; x := y + 2;
f[x]
Out[1]= (2 + z^3)^2
最好是接受这两种语言的差异,并尝试坚持每种语言的惯用语。试图否认它并像另一个一样编程可能会让你的生活变得悲惨(例如,从 C 背景开始,并坚定地For
在 Mathematica 中编写循环)。