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

Direct replacement within a function body of arguments such as the symbols >, <, !=, ==

假设我调用一个带有更大符号“>”的函数作为参数:

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 一起使用,如何实现这个结果?

正如@agentp 所暗示的,这里的答案是可以的:

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

但是我觉得这很冗长。可以改进吗?

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

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

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