Ich verwende NestWhileList in einer Situation, in der es oft die 'maximale Anzahl von Auswertungen' trifft. Nach ein paar curios Ergebnisse zu erzielen, nahm ich einen genaueren Blick auf, wie NestWhileList
reagiert spezifiziert eine maximale Anzahl von Ergebnissen zu haben:Mathematica: Grokking 'maximale Anzahl von Auswertungen' Argument für `NestWhileList`
Table[{nmax,
[email protected][
(* f: nesting function *) Identity,
(* initial state *) 1,
(* test function *) False &,
(* m: of arguments for test *) 1,
(* nmax: max # applications of f *) nmax,
(* n: extra evaluations *) 1]}, {nmax, 0, 2}];
ToString[TableForm[%,
TableHeadings -> {None, {"nmax", "output length"}}]]
Der überraschende Teil ist, dass nmax=1
wird ausgesondert: Hier f
wird 2 mal angewandt, während für alle anderen Werte wird nur einmal angewendet:
nmax output length
0 2
1 3
2 2
die ‚Extra-Evaluationen‘ scheinen ein Teil des Problems zu sein. Verlassen Sie diese Option aus gibt viel vernünftige Ergebnisse:
Table[{nmax,
[email protected][
(* f: nesting function *) Identity,
(* initial state *) 1,
(* test function *) False&,
(* m: of arguments for test *) 1,
(* max: max # applications of f *) nmax]},{nmax,0,2}];
ToString[TableForm[%,TableHeadings->{None, {"nmax","output length"}}]]
Out[123]=
nmax output length
0 1
1 1
2 1
Meine Frage: Ist das irgendwie Sinn machen, oder ist es nur ein Fehler?
Danke Michael - dachte, das war nur der einfachste Weg, das zu tun :) – Janus
Kein Problem, und danke für die darauf hingewiesen. Sie können Fehler immer auch per E-Mail an [email protected] senden, wenn Sie das bevorzugen. –