MATLAB'de özyinelemeli bir anonim işlevine sahip olmanın tek yolu, işlev tanıtıcısını bir girdi olarak geçirmektir. Daha sonra anonim işlevinden onu çağırabilirsiniz.
%// 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);
Bu, herhangi bir dallanma mantığınız olmadığı için sonsuz yineleme ile sonuçlanacaktır. Eğer dallanma mantığı simüle etmek istiyorsanız, bu (here ödünç iif
fonksiyonunu) yapmak için başka bir anonim işlevi uygulamak gerekir:
%// 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()
gerçekten solid series of blog entries bu tür üzerine çıkması Mathworks sitede mevcuttur anonim işlevler kullanarak fonksiyonel programlama.
bu ilginç egzersiz olmasına rağmen Dikkat ait
A Word, kesinlikle kimsenin kolayca kodunuzu anlamak istiyorsanız bu kullanarak tavsiye etmem. Standart bir işlevde hata ayıklamak çok daha kolay ve kolaydır. Daha sonra anonim bir işleve ihtiyacınız varsa, anonim bir işlevle bu işleve çağrıyı sarın.
myanonfunc = @(varargin)myfunc(varargin{:});
Ya da sadece fonksiyonu
myfunchandle = @myfunc;
yapabilirsiniz için bir işlev tanıtıcı oluşturmak ama ben öyle istiyorum şüpheliyim. [Loren Shure'ın anonim işlevler kullanarak işlevsel programlama ile ilgili makalesine bakın] (http://blogs.mathworks.com/loren/2013/01/10/introduction-to-functional-programming-with-anonymous-functions-part- 1/# c8d04efb-1a2d-4c35-afff-dd52e6c660d2) özellikle "inline koşullu" bölümünde. – Dan