Математическая ссылка и отложенная оценка / переменные - PullRequest
1 голос
/ 02 августа 2011

У меня есть скалярная функция, написанная на Фортране, которую я использую в Mathematica через небольшой модуль mathlink.Я хочу, чтобы эта функция вела себя как можно ближе к нативной функции Mathematica, включая обработку символьных констант.

Много раз мне хотелось написать какое-то выражение в mathematica с символическими константами / переменными, которые будут замененыпоследний со списком правил замены.Тем не менее, Mathematica немедленно пытается оценить мою функцию mathlink с символическими аргументами на месте, и это, очевидно, не удается.Например, даже следующее простое выражение потерпит неудачу

extf[a]/.a->5

Есть ли способ отложить оценку функции до тех пор, пока все символические аргументы не будут заменены числами?

Один не такой элегантныйЯ использовал с некоторым успехом (но не приемлемо, если я хочу включить эту функцию в пакет mathematica общего назначения, чтобы поделиться с коллегами), чтобы оценить все с «фиктивной» ссылкой на внешнюю функцию, а затем использовать правило замены дляпоменяйте местами все фиктивные ссылки на реальные, одновременно оценивая все остальные числовые константы.например,

dummyf[a]/.{a->5,dummyf->extf}

1 Ответ

4 голосов
/ 02 августа 2011

Было бы полезно что-то, использующее шаблонный шаблон Mathematica?Обратите внимание, что вам нужно опустить любое определение для holddummyf, когда ввод не числовой.

dummyf[a_?NumericQ] := extf[a]
holddummyf[a_?NumericQ] := extf[a]
dummyf[a_] := holddummyf[a]

[In]  dummyf[0.3]
[Out] extf[0.3]

[In]  dummyf[b]
[Out] holddummyf[b]

[In]  % /. b -> 5
[Out] extf[5]

Я предполагаю, что другой вопрос, который нужно задать, является ли наличие extf в Фортране строго необходимым.

...