2

MiniZincの基本に精通しています。MiniZinc IDE を使用して、次のようなスニペットを作成します。

solve satisfy;

string: s1 = "hello";
string: s2 = "world";

function list of int: cdr(list of int: v) =
  [v[i] | i in 1..length(v)];
function list of string: cdr(list of string: v) =
  [v[i] | i in 1..length(v)];

function string: concat(list of string: V) =
  if length(V) == 0 then "" else V[0] ++ concat(cdr(V)) endif;

output [concat([s1," ",s2])++" "++show(cdr([1,2,3]))];

表示する

Compiling hello.mzn
Running hello.mzn
hello world [1, 2, 3]
----------
Finished in 49msec

現在、int のリストの cdr が間違っているようです。見つけることはできませんが、それは私のバグだと思います。

アサーションはここで私を助けることができますか? Gecode (そして Gist を使用) を使用してコードを実際に運用する予定なので、そのルートに従うことはできますか?

ヒントをいただければ幸いです...

このスニペットを編集

solve satisfy;

function list of string: cdr_s(list of string: v) =
  [v[i] | i in 2..length(v)];

function string: vcat(list of string: V) =
  if length(V) == 0 then "" else V[1] ++ vcat(cdr_s(V)) endif;

output [vcat(["hello"," ","world"])];

レポート

MiniZinc: type error: no function or predicate with this signature found: `cdr_s(array[int] of string)'
/tmp/MiniZinc IDE-9nYiuF/hello.ozn:2
4

2 に答える 2

3

MiniZincは、通常のプログラミング言語ではなく、制約ソルバーです。変数とパラメーターを認識します。制約を定義して、解を形成する変数値の検索スペースを区切ってください。次に、出力ステートメントを使用して、ソリューションをフォーマットされた方法で表示します。

コードには、変数の定義も制約も含まれていません。アサーションは、MiniZinc無効なパラメーターを検出するための特別な制約 (「制約アサート」) として使用されています。assertこれは、 のマクロに似ていC/C++ます。

ユーザー定義関数は、MiniZinc 2.0 で導入され、より洗練された方法で制約を記述できます。再帰もサポートされています。

チュートリアルを見てください。

Hakan Kjellerstrand のMiniZinc ページも素晴らしいスタートです。

タグgecodeは、 でサポートされているソルバー バックエンドの 1 つを参照していMiniZincます。MiniZinc IDEバックエンドを選択できます。一部のバックエンドでは、外部パッケージのインストールが必要です。MiniZincコンパイラは、ソルバー バックエンドの 1 つによって最終的に解釈および解決される中間コードを作成しますFlatZinc

于 2015-01-22T23:59:45.430 に答える