我熟悉 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
现在,整数列表的 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