在参数的函数体内直接替换,例如符号>,<,!=,==

时间:2015-03-07 14:09:46

标签: wolfram-mathematica

假设我使用大符号“>”调用函数一个论点:

findb[x^2 - 10, ">", 0]

不是在函数体内测试第二个参数是什么(通常的设计),我希望它直接替换它出现的每个表达式:

findb[exp_Plus, ptest_String, value_?NumberQ] := 
Module[{}, 
x /. Flatten[{FindInstance[(exp ToExpression[ptest]  value) &&  
   x  != 0 , x, Reals]}]]

由于这不适用于内置ToExpression,实现此结果的方法是什么?

2 个答案:

答案 0 :(得分:3)

正如@agentp所暗示的,答案是肯定的:

  findb[exp_Plus, ptest_String, value_?NumberQ] := Module[{},
   x /.Flatten[{FindInstance[(ToExpression[
   StringJoin[ToString[exp, InputForm], ptest, 
   ToString[value]]]) &&  x  != 0 , x, Reals]}]]

然而,我觉得非常冗长。可以改进吗?

答案 1 :(得分:0)

替代方法,假设您支持允许运算符的离散列表:

 Switch[ ptest ,
          ">" , exp > value ,
          "<" , exp < value , ... ]

不优雅,但它可能是最安全最强大的方法。