假设我有一个引理mylem: foo ?a = bar ?a
,我需要将它应用到一个目标上,该目标有两次出现foo
,例如baz (foo (f p q)) (foo (g r s))
,但只出现在其中一个位置上。我知道有两种方法可以做到这一点,而不必写出所有的p
, q
...,这可能是复杂的表达式。
- 使用
apply (subst mylem)
后跟适当数量(此处为 0 或 1)的back
命令。 - 使用
apply (subst mylem[where a = 'foo x y', standard])
, wherex
和y
是未绑定的名称。
这里的使用subst
只是为了演示;我真的很想修改引理,例如,rule
当有多个可能的匹配项我想以这种方式消除歧义时使用它。
这两种方法对我来说都是不好的风格。有没有更好的方法来实现这一目标?