在序言中使用统一项操纵器创建延迟约束

发布于 2025-01-04 21:13:50 字数 498 浏览 0 评论 0原文

这是我在序言中的算术不等式表达式:

2*X + 3*Y > 4*Z

我使用了单位项操纵器,如下所示:

Expr =.. [Op, Lhs, Rhs]

现在我有 Lhs = 2*X + 3*Y,Rhs 为 4*Z,Op 为 > 到现在为止一切都很好。

我想要的是使用 Eclipse Prolog 中的 IC 库为此表达式构建一个延迟目标。 例如,我希望像这样分配一个新创建的变量:

Eq = (Lhs #Op Rhs)  %meaning, Eq = (2*X + 3*Y #> 4*Z)

现在,由于所需的不等式(在本例中为 >)存储在 Op 中,尽管我使用 Eq = (Lhs #Op Rhs) ,eclipse 返回错误。

当我的运算符要从变量 Op 中获取时,如何创建这个延迟约束? 谢谢。

This is my arithmetic inequality expression in prolog:

2*X + 3*Y > 4*Z

I used the unity term manipulator like this:

Expr =.. [Op, Lhs, Rhs]

And now I have Lhs = 2*X + 3*Y, Rhs as 4*Z and Op as >
Everything fine till now.

What I want is to construct a delayed goal using the IC library in Eclipse Prolog for this expression.
Example, I want a newly created variable to assigned like this:

Eq = (Lhs #Op Rhs)  %meaning, Eq = (2*X + 3*Y #> 4*Z)

Now, since the required inequality (in this case >), is stored in Op, though I use Eq = (Lhs #Op Rhs), eclipse is returning error.

How do i create this delayed constraint, when my operator is to be taken from the variable Op?
Thank You.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

睫毛溺水了 2025-01-11 21:13:50

您可以使用事实来定义关系:

cstr(=,#=).

或者使用 concat_atom/2

concat_atom([#,Op],CstrOp),

例如:

?- Eq = (X = 1),
   Eq =.. [Op, L, R],
   concat_atom([#, Op], CstrOp),
   Cstr =.. [CstrOp, L, R],
   call(Cstr).
Eq = 1 = 1
X = 1
Op = =
L = 1
R = 1
CstrOp = #=
Cstr = 1 #= 1
Yes (0.00s cpu)

请注意,这仅适用于基本的相等/不等运算符。您不能将 # 添加到任何运算符并期望它充当约束!

You could use facts to define the relations:

cstr(=,#=).

Or use concat_atom/2:

concat_atom([#,Op],CstrOp),

E.g.:

?- Eq = (X = 1),
   Eq =.. [Op, L, R],
   concat_atom([#, Op], CstrOp),
   Cstr =.. [CstrOp, L, R],
   call(Cstr).
Eq = 1 = 1
X = 1
Op = =
L = 1
R = 1
CstrOp = #=
Cstr = 1 #= 1
Yes (0.00s cpu)

Note that this only works for the basic equality/inequality operators. You cannot add # to just any operator and expect it to work as a constraint!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文