2017-11-30 6 views
1

出力時にオプションの列挙型はどのように出力されますか?MiniZincに欠けているオプションの列挙型を出力する

enum Foo = { A, B }; 
var opt Foo: foo; 
output [ "foo: \(foo)" ]; 
solve satisfy; 

、この出力で失敗します。

Compiling test.mzn 
MiniZinc: flattening error: 
    function _toString_Foo is used in output, par version needed 
Finished in 29msec 

私はint型

set of int: Foo = 1..2; 
var opt Foo: foo; 
output [ "foo: \(foo)" ]; 
solve satisfy; 

の設定するのFooを変更した場合、それは

Compiling test.mzn 
Running test.mzn 
foo: <> 
---------- 
Finished in 136msec 

そして、欠損値の作品明らかにここでは問題ではありません。解決策もがintのセットで失敗していること、それはまだ実際に

Compiling test.mzn 
Running test.mzn 
MiniZinc: evaluation error: undeclared identifier '_absent' 
unknown file 
Finished in 39msec 

で失敗

set of int: Foo = 1..2; 
var opt Foo: foo; 
output [ "foo: " ++ 
    if (occurs(fix(foo))) then "present" else "absent" endif 
              ]; 
solve satisfy; 

を失敗し、存在する場合、私がチェックしている場合でも

答えて

2

更新:この問題は、MiniZincコンパイラのdevelopブランチで解決されました。次のリリース2.1.6では、オプションのパラメータを出力に使用することができます。


列挙は、ソルバ入力の整数として表現されるため、特別なマッピング関数は、正しい出力を保証するために、出力モデルに挿入されます。

ソルバー出力をMiniZinc出力に変換することは、solns2out実行可能ファイルのタスクです。これは、出力モデル(.ozn)を使用して行われます。

エラーは、整数を列挙に戻すために必要な関数が見つからないためです。これはコンパイラのバグです。たった2日前に、列挙セット用の_toString_関数が開発ブランチに追加されました。オプション型のバージョンはまだ見当たりません。 https://github.com/MiniZinc/libminizinc/issues

+0

私はそれが期待されているときに表示して確認することができ、次のリリースのスケジュール、またはどこかにあります:

は、私はあなたがGitHubの上で問題を作成し、問題がありそうな次のMiniZincのリリースで解決されます示唆します?それは、スナップショットのバージョンを自分で構築せずにダウンロードするオプションがないようです。 –

+0

新しいバージョンのMiniZincディストリビューションについての発表はまだありません。 MiniZincチームは現在、今後のバージョンの締め切りには対応していませんが、問題を修正する必要がある重要なバグや主要な機能が追加されている場合はいつでもバージョンをリリースします。来年の最初の月にはより大きなリリースが予定されています。 – Dekker

関連する問題