1

変数のドメインが数値ではない([lisa ann mary joanna]のような)CSPを実装したいと思います。Mozart / Ozでこれを実現する方法はありますか?

4

1 に答える 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 に答える