遅延評価は主に関数型プログラミング言語で使用され、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
2つの言語の違いを受け入れ、それぞれの慣用句に固執しようとした場合に最適です。それを否定し、他のプログラムと同じようにプログラムしようとすると、あなたの人生が悲惨になる可能性があります(たとえば、Cの背景から始めて、ForMathematicaでループを断固として書く)。