repeat a function n times in Mathematica
I want to repeat a function n times on a table, For n=2 I have the following code, How can I be sure that the function had run twice since my fc is differend every time?
smat = Table[{9, 8, 10}, {3}]
开发者_高级运维f[x_?Table] := ReplacePart[
x, {{2, 1} -> x[[2]][[1]] - #, {2, 2} -> x[[2]][[2]] + #}] &@ fc[x[[2]][[1]]];
fc[k_?NumericQ] := Count[RandomReal[{0, 1}, k], x_ /; x < .1]
Nest[f, smat, 2]
This is probably what you want:
smat = Table[{9, 8, 10}, {3}]
ClearAll[f, fc];
f[x_List] :=
ReplacePart[
x, {{2, 1} -> x[[2]][[1]] - #, {2, 2} -> x[[2]][[2]] + #}] &@
fc[x[[2]][[1]]];
fc[k_?NumericQ] := Count[RandomReal[{0, 1}, k], x_ /; x < .1]
Nest[f, smat, 2]
ClearAll
clears any previous definitions for those symbols (just in case). f[x_?Table]
won't work; you want f[x_List]
, which means that the argument has a List
head (Table
is not a Head
, and ?
isn't what you want here).
I am not sure I have really answered your question though...
EDIT: To be clear, f[x_?something]
means "apply something
to x
and, if it returns True
, evaluate the right hand side of the :=
that follows. Look up PatternTest
in Mathematica's documentation for more.
Acl covered the problems with the code pretty well, so I won't. To answer your question, though, I'd first separate your functions f
and fc
in separate cells, with fc
being declared prior to f
, and preface each cell with Clear[<function name>]
. Now, to test if f
is being applied twice, temporarily replace fc
with
fc[_]:= a
or use another "dummy" value other than a, but it should be symbolic to increase readability. As a point of note, {1,2,3} + a == {1 + a, 2 + a, 3 + a}
, so if f
is applied twice, each term in x[[2]][[1]]
and x[[2]][[2]]
will have 2 a
added to it.
Now, if you are unsure if fc
is working correctly by itself, I'd apply it to a number separate cases without f
, first.
精彩评论