Wolfram mathematica 在函数体中直接替换参数,如符号><;,!===
让我们假设我调用一个带有更大符号“>”的函数作为参数:Wolfram mathematica 在函数体中直接替换参数,如符号><;,!===,wolfram-mathematica,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
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 , ... ]
开关[ptest,
“>”,exp>值,
“使用ToString
将整个表达式构造为一个字符串,并将其输入到ToExpression
。建议您将此类问题提交给mathematica.stackexchange.comminor improvent:ToString
可以应用于字符串,因此您可以将其编写得更简洁,如ToExpression@StringJoin[ToString/@{exp,ptest,value}]