Calling user functions recursively
2 ビュー (過去 30 日間)
古いコメントを表示
I have user created functions called f11(), f12(), f13(), f21(), f22(), f23()... I want to call these function recursively for i=1 to n for j=j to m eval(fij()) I have tried with the eval() function. It does not work. Could someone help me? thank you
1 件のコメント
John D'Errico
2017 年 2 月 20 日
And yet another reason not to write numbered functions, numbered variables, etc. Regardless, you are asking to call them in sequence, but not recursively. A recursive call is one where a function calls itself.
回答 (2 件)
dbmn
2017 年 2 月 20 日
First of all: Listen to John - he is right about this. Try not to use numbered functions and variables (you can read why this is a bad idea on numerous posts on Matlab Answers - just search).
But because I know you gonna try it anyway, here is a solution
A) Do nothing but change your eval to: (BAD)
eval(sprintf('f%d%d()', i, j))
B) Create a function caller that handles your functions (Better, but uses still the numbered functions - but at least it can be debugged)
function [] = function_caller(idx)
switch idx
case 1
% your function here
case 2
% your function here
end
end
C) Rewrite your code and avoid the numbered functions - there must be a smarter way to do this.
Work with Functions and Subfunctions instead and try to get a clear image about what your code actually needs to do in what order.
Stephen23
2017 年 2 月 20 日
編集済み: Stephen23
2017 年 2 月 20 日
Why not just put the functions into a cell array, then this is trivial:
>> C = {@rand,@()randi(9,1),@()randi([10,20],1)};
>> cellfun(@(f)f(),C)
ans =
0.91338 6 11
or
for k = 1:numel(C)
C{k}()
end
Calling numbered functions is not a good solution:
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Whos についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!