0

これは、プロローグでの私の算術不等式式です。

2*X + 3*Y > 4*Z

私はこのような統一用語マニピュレータを使用しました:

Expr =.. [Op, Lhs, Rhs]

そして今、私は今Lhs = 2*X + 3*Y, Rhs as 4*Z and Op as > まですべてがうまくいっています。

私が欲しいのは、この式のためにEclipsePrologのICライブラリを使用して遅延目標を構築することです。たとえば、新しく作成した変数を次のように割り当てます。

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

さて、必要な不平等(この場合は>)がOpに格納されているので、私は使用していますがEq = (Lhs #Op Rhs)、eclipseはエラーを返しています。

演算子が変数Opから取得される場合、この遅延制約を作成するにはどうすればよいですか?ありがとうございました。

4

1 に答える 1

1

ファクトを使用して、関係を定義できます。

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)

これは、基本的な等式/不等式演算子に対してのみ機能することに注意してください。演算子だけに追加#して、制約として機能することを期待することはできません。

于 2012-02-13T15:19:31.247 に答える