我正在生成一个像这样的替换规则列表
ops = {LessEqual, GreaterEqual}; ineqRules = Table[HoldPattern[Inequality[a_, op1, c_, _, e_]] -> a == c, {op1, ops}]
上面不起作用,因为HoldPattern从Table中隐藏了“op1”,我该如何解决?
这是之前question
的后续行动答案 0 :(得分:2)
怎么样
ops = {LessEqual, GreaterEqual};
ineqRules = (HoldPattern[Inequality[a_, #, c_, _, e_]] :> a == c) & /@ ops
编辑:要解决belisarius答案中提到的问题,请尝试:
ineqRules=Flatten[{HoldPattern[Inequality[a_,#,c_,___]]:>a==c,HoldPattern[#[a_,c_]&&___]:>a==c}&/@ops]
这显然取决于你有一个简单的结构,即没有其他&&'s。
答案 1 :(得分:2)
这是使用:
的工作ops = {LessEqual, GreaterEqual};
ineqRules =
Table[
With[{op1=op1},
HoldPattern[Inequality[a_, op1, c_ ,_ ,e_]] -> a == c
],
{op1, ops}
]
答案 2 :(得分:1)
我确信应该有更好的方法,但这似乎有效:
ops = {LessEqual, GreaterEqual};
ineqRules[op_] := HoldPattern[Inequality[a_, op, c_, _, e_]] -> a == c;
ineq = Table[ineqRules[op], {op, ops}];
Inequality[1, LessEqual, x, Less, 2] /. ineq
Out: 1 == x
HTH
修改
小心这一点:
Inequality[e1, GreaterEqual, e2, Equal, e3] /. ineq
Out> e1 == e2
但是
Inequality[1, GreaterEqual, e2, Equal, 2] /. ineq
Out> False
我想如果需要的话,我需要一些Hold []野兽......让我们知道