Mathlink和延迟评估/变量

时间:2011-08-01 20:34:04

标签: wolfram-mathematica mathlink

我有一个用Fortran编写的标量函数,我通过一个小的mathlink模块在Mathematica中使用它。我希望这个函数尽可能接近原生Mathematica函数,包括它对符号常量的处理。

很多时候我想在mathematica中用符号常量/变量写一些表达式,后面会用替换规则列表替换它们。但是,Mathematica立即尝试使用符号参数来评估我的mathlink函数,它显然失败了。例如,即使以下简单表达式也将失败

extf[a]/.a->5

有没有办法延迟函数的评估,直到所有符号参数都被数字替换?

一种不太优雅的方式我已经成功使用(但不可接受如果我希望将此功能包含在通用mathematica包中与同事共享)是通过对外部函数的“虚拟”引用来评估所有内容然后使用替换规则交换所有虚拟引用以用于实际引用,同时我评估所有其他数值常量。 e.g。

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

1 个答案:

答案 0 :(得分:4)

使用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]

我想要问的另一个问题是,Fortran中是否有extf是非常必要的。