MINERVAは、制約処理のための先進の機能を持つと共に、あなた自身のユーザー定義制約処理を加えることができます。
制約処理は、例えば以下のような難しい管理問題ために非常に強い力を発揮します: 資源配分、スケジューリング、計画。
MINERVAは、制約処理のために2つの述語を定義します:
co_add(+Var, +Constraint)
co_get(+Var, -Constraint)
The programmer is has to supply two user defined predicates:
co_merge(+Var, +ConstraintList)
co_check(+Term, +Constraint)
"Var"が変数であるならば、それは制約変数になります。
"Var"が制約変数であるならば、制約は追加の制約としてマークされます、そして、ユーザー定義述語co_merge(+Var,[NewConstraint,OldConstraint])は起動されます。
"Var"が変数でないならば、ユーザー定義述語co_check(+Var, NewConstraint)は起動されます。
co_merge/2が起動される前に、関連する制約変数は普通の変数に変えられます。 co_add/2の以下の呼び出しの後でのみ、そして、もちろんバックトラックの場合だけでのみそれは、再び制約変数になります。
| 冒頭へ |
|