MATLABで再帰匿名関数を使用する唯一の方法は、自身の関数ハンドルを入力としてに渡すことです。その後、無名関数内から呼び出すことができます。
%// The first input f is going to be an anonymous function
myfun = @(f,x,n) f(f, x, n+1);
%// Then use your anonymous function like this (note the first input)
out = myfun(myfun, x, n);
これは、ブランチングロジックがないため、明らかに無限に再帰します。あなたが分岐ロジックをシミュレートしたい場合は、この(hereから借りiif
機能)を行うには、別の匿名関数を実装する必要があります:
%// Anonymous function to simulate if/elseif/else
iif = @(varargin) varargin{2*find([varargin{1:2:end}], 1, 'first')}();
%// Your anonymous function that is recursive AND has branching
myfun = @(f,x,n)iif(n > 1, ... % if n > 1
@()f(f, f(f, x, n-1), 1), ... % Recurse
true, ... % else
@()expression(x)); % Execute expression()
本当にsolid series of blog entriesのこの種の上に行くMathworks社のサイトにあります匿名関数を使用した関数型プログラミング
これは面白いエクササイズですが注意の
A言葉は、私は間違いなくあなたは、誰もが簡単にあなたのコードを理解したい場合は、これを使用してお勧めしません。標準関数をデバッグする方がはるかに明確で簡単です。次に、無名関数が本当に必要な場合は、その関数への呼び出しを無名関数でラップします。
myanonfunc = @(varargin)myfunc(varargin{:});
それとも機能
myfunchandle = @myfunc;
次のことが可能に関数ハンドルを作成しますが、私はあなたがしたい疑います。 [Loren Shureの匿名関数を使った関数型プログラミングに関する記事](http://blogs.mathworks.com/loren/2013/01/10/introduction-to-functional-programming-with-anonymous-functions-part- 1 /#c8d04efb-1a2d-4c35-afff-dd52e6c660d2)、特に「インライン条件」セクション。 – Dan