在prolog中使用单位项操纵器创建延迟约束
这是我在prolog中的算术不等式表达式:在prolog中使用单位项操纵器创建延迟约束,prolog,logic,constraint-programming,Prolog,Logic,Constraint Programming,这是我在prolog中的算术不等式表达式: 2*X + 3*Y > 4*Z 我使用统一术语操纵器,如下所示: Expr =.. [Op, Lhs, Rhs] Eq = (Lhs #Op Rhs) %meaning, Eq = (2*X + 3*Y #> 4*Z) 现在我有了Lhs=2*X+3*Y,Rhs为4*Z,Op为> 到目前为止一切都很好 我想要的是使用EclipseProlog中的IC库为这个表达式构建一个延迟目标。 例如,我希望新创建的变量按如下方式分配: Expr
2*X + 3*Y > 4*Z
我使用统一术语操纵器,如下所示:
Expr =.. [Op, Lhs, Rhs]
Eq = (Lhs #Op Rhs) %meaning, Eq = (2*X + 3*Y #> 4*Z)
现在我有了Lhs=2*X+3*Y,Rhs为4*Z,Op为>
到目前为止一切都很好
我想要的是使用EclipseProlog中的IC库为这个表达式构建一个延迟目标。
例如,我希望新创建的变量按如下方式分配:
Expr =.. [Op, Lhs, Rhs]
Eq = (Lhs #Op Rhs) %meaning, Eq = (2*X + 3*Y #> 4*Z)
现在,由于所需的不等式(在本例中为>)存储在Op中,尽管我使用了Eq=(Lhs#Op Rhs)
,eclipse返回了错误
当从变量Op中提取运算符时,如何创建此延迟约束?
谢谢。您可以使用事实来定义关系:
cstr(=,#=).
或者使用concat_atom/2
:
concat_atom([#,Op],CstrOp),
例如:
请注意,这仅适用于基本的等式/不等式运算符。您不能仅向任何操作符添加#
,而期望它作为一个约束