1

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

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

extf[a]/.a->5

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

我使用的一种不太优雅的方法取得了一些成功(但如果我希望将此函数包含在通用mathematica 包中以与同事共享,这是不可接受的)是使用对外部函数的“虚拟”引用来评估所有内容,然后使用在评估所有其他数值常数的同时,将所有虚拟引用交换为真实引用的替换规则。例如

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

1 回答 1

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]

我想另一个要问的问题是extf在 Fortran 中是否是绝对必要的。

于 2011-08-01T20:56:39.857 回答