Lazy evaluation主要用于函数式编程语言,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的定义更改为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背景开始并坚定地在Mathematica中编写For循环).