Мемуизированные функции - это функции, запоминающие найденные значения. При необходимости посмотрите в центре обработки документов какой-нибудь фон по этому вопросу в системе Mathematica.
Предположим, что в одном из пакетов имеется следующее определение
f[0] = f[1] = 1
f[x_] := f[x] = f[x - 1] + f[x - 2]
. Пользователь может загрузить пакет и сразу же начать запрос f [1000]. Это вызовет сообщение об ошибке $ RecursionLimit:: reclim и прекратит работу. Даже если пользователь затем пытается что-то меньшее, скажем f [20], к настоящему времени определение f повреждено, и результат больше не является хорошим. Конечно, разработчик пакета может увеличить предел рекурсии и предупредить пользователя, но мой вопрос:
Как вы можете улучшить определение f так, что если пользователь просит f [1000] он/она получает ответ без каких-либо проблем? Я заинтересован в способе ловушки пользовательского ввода, его анализа и принятия любых необходимых мер для оценки f [1000].
Я легко могу представить, что можно изменить предел рекурсии, если входное значение больше 255 (и затем вернуть его на исходный уровень), но что я действительно хотел бы видеть, если есть способ для f узнать, сколько значений он «знает» (fknownvalues) и принять любые входные значения < = fknownvalues + $ RecursionLimit без проблем или увеличить $ RecursionLimit, если входные значения выше.
Спасибо за помощь
-121--1024585-У меня есть метод веб-службы, который получает объект. Одним из атрибутов является «интервал», который является целым числом.
Я хотел бы сделать этот атрибут обязательным, но без предоставления какого-либо значения по умолчанию - я хочу, чтобы пользователь должен был явно установить значение.
Если я использую int interval
- атрибут отображается как int, и если пользователь не устанавливает атрибут явным образом, ноль (Java default for primitive int) будет отправлен.
Если я использую Целочисленный интервал
- атрибут отображается как Integer и объявляется необязательным в WSDL, так что пользователь не может видеть, что он необходим перед отправкой запроса.
Если я использую целочисленный интервал
с @ StartElement (обязательный = true)
или @ StartElement (nillable = false)
- атрибут отображается как int.
Атрибут может иметь любое целое число -
Я могу использовать интервал BigInteger
с @ StartElement (обязательный = true)
но, чем мы упускаем преимущества использования типа ядра Integer.
Я хотел бы представить атрибут как Integer, поэтому я получу null, если пользователь не установил атрибут, и в то же время я хотел бы, чтобы WSDL показал, что атрибут требуется, чтобы пользователи знали, что он требуется просто, посмотрев WSDL.