Я использую NestWhileList в ситуации, когда оно часто достигает «максимального количества оценок».После получения некоторых любопытных результатов я более внимательно посмотрел на то, как NestWhileList
реагирует на указание максимального количества результатов:
Table[{nmax,
Length@NestWhileList[
(* 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"}}]]
Удивительно, что выделено nmax=1
: Здесь f
применяется 2 раза, тогда как для всех других значений он применяется только один раз:
nmax output length
0 2
1 3
2 2
Кажется, что «дополнительные оценки» являются частью проблемы.Отказ от этой опции дает гораздо более разумные результаты:
Table[{nmax,
Length@NestWhileList[
(* 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
Мой вопрос: это как-то имеет смысл, или это просто ошибка?