Die einzige Möglichkeit, eine rekursive anonyme Funktion in MATLAB zu haben, besteht darin, die Funktion handle an 10 selbst als Eingabe zu übergeben. Sie können es dann innerhalb der anonymen Funktion aufrufen.
Dies führt offensichtlich zu unendlicher Rekursion, da Sie keine Verzweigungslogik haben. Wenn Sie die Verzweigungslogik simulieren möchten, müssen Sie eine andere anonyme Funktion implementieren diese (iif
Funktion von here entlehnt) zu tun:
%// 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()
Es ist eine wirklich solid series of blog entries auf der Mathworks Website, die über diese Art geht von Funktionale Programmierung mit anonymen Funktionen.
Ein Wort der Vorsicht
Zwar ist dies eine interessante Übung, ich würde auf jeden Fall nicht mit diesem empfehlen, wenn Sie jemand wollen Ihren Code leicht zu verstehen. Es ist viel einfacher und klarer, eine Standardfunktion zu debuggen. Wenn Sie dann wirklich eine anonyme Funktion benötigen, müssen Sie den Aufruf an diese Funktion in einer anonymen Funktion weiterleiten.
myanonfunc = @(varargin)myfunc(varargin{:});
Oder erstellen Sie einfach eine Funktion Griff in die Funktion
myfunchandle = @myfunc;
Sie können aber ich bezweifle, Sie wollen. Werfen Sie einen Blick auf [Loren Shures Artikel über funktionale Programmierung mit anonymen Funktionen] (http://blogs.mathworks.com/loren/2013/01/10/introduction-to-functional-programming-with-anonymous-functions-part- 1/# c8d04efb-1a2d-4c35-afff-dd52e6c660d2) besonders im Abschnitt "Inline-Bedingungen". – Dan