在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

这是我在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 =.. [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),
例如:

请注意,这仅适用于基本的等式/不等式运算符。您不能仅向任何操作符添加
#
,而期望它作为一个约束