Mathematica: аргумент Grokking «максимальное количество оценок» для NestWhileList - PullRequest
7 голосов
/ 08 ноября 2010

Я использую 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

Мой вопрос: это как-то имеет смысл, или это просто ошибка?

1 Ответ

4 голосов
/ 08 ноября 2010

Это не имеет смысла, и я уверен, что это просто ошибка.NestWhile действует аналогично:

In[53]:= NestWhileList[# + 1 &, 1, False &, 1, 1, 1]

Out[53]= {1, 2, 3}

In[54]:= NestWhile[# + 1 &, 1, False &, 1, 1, 1]

Out[54]= 3

Вот обходная функция для NestWhileList:

myNestWhileList[f_, expr_, test_, m_, max_, n_] :=
 Module[{nwl},
  nwl = NestWhileList[f, expr, test, m, max];
  Join[nwl, Rest[NestList[f, Last[nwl], n]]]
  ]

In[75]:= myNestWhileList[# + 1 &, 1, False &, 1, 1, 1]

Out[75]= {1, 2}

Очевидно, что это не совсем общая замена NestWhileList, но онадостаточно просто обобщить, если необходимо.

Я отправил отчет об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...