Les structures de programmation fonctionnelle sur l'échange de fichiers de Mathworks sont précisément ce dont vous avez besoin. Chacune de ces fonctions est conçue pour être utilisée dans des fonctions anonymes. Elles sont discutées en détail dans une série en 3 parties sur le blog Loren on the Art of MATLAB : Partie 1, Partie 2 et Partie 3.
En particulier, la Partie 3 aborde la mise en œuvre de boucles en tant que fonction. Pour compléter, je vais emprunter une partie du code de Functional Programming FEX submission pour démontrer comment en m-code nous pouvons utiliser une boucle while dans une fonction anonyme. Tout d'abord, définissons une fonction loop
:
function x = loop(x, continueFcn, f)
% Inputs:
% x - État initial (peut être un tableau de cellules d'arguments pour f)
% continueFcn - Fonction de continuation, renvoie vrai si la boucle doit continuer
% f - Fonction de l'état (x) à exécuter à chaque itération
while ~continueFcn(x{:})
x = f(x{:});
end
end
Pour l'exemple fourni, val
aura une valeur initiale, disons val0
. De plus, supposons que StuffDoneEachWhileLoop
soit une fonction qui définit comment la variable val
doit être mise à jour à chaque boucle while. Alors :
myFunc = @(n) loop(val0, ... % Initialiser l'état
@(val) val < tolérance, ... % Condition OP
@(val) StuffDoneEachWhileLoop(val)); %
Diverses extensions de l'idée ci-dessus sont possibles. Consultez la soumission de Functional Programming FEX de Tucker McClure pour plus de détails.