変数のドメインが数値ではない([lisa ann mary joanna]のような)CSPを実装したいと思います。Mozart / Ozでこれを実現する方法はありますか?
1 に答える
2
C++ で言語拡張などを実装することは可能かもしれませんが、言語自体では不可能です。
組み込み型の制約は、有限領域制約 (非負の整数)、有限集合制約 (非負の整数のセットの領域に対する制約)、およびレコード制約のみです。
おそらく、整数定数を使用して問題をモデル化できます。
declare
%% 4 constants
Lisa = 1
Ann = 2
Mary = 3
Joanna = 4
%% N will be the constrained variable
N
in
N::[Lisa Ann Mary Joanna]
{Show N} %% displays N{1#4}, i.e. N is between 1 and 4
N \=: Mary %% tell: N is not Mary
{Show N} %% displays N{1 2 4}, i.e. N is one of 1,2,4
有限領域で作業したくない場合は、論理プログラミングのより一般的な考え方があります。変数のさまざまな可能な値の選択ポイントを作成できます。たとえば、次のようになります。
declare
proc {Script A}
A =
choice
lisa
[] ann
[] mary
[] joanna
end
end
{Show {SearchOne Script}} %% displays "[lisa]"
{Show {SearchAll Script}} %% displays "[lisa ann mary joanna]"
Combinatorsを使用して、静的に知られていない値の数でそれを行うことも可能です。
于 2011-03-03T14:50:54.013 に答える