Hi,<div><br></div><div>I'm trying to create predicate for counting the whole number of solutions. I'm trying</div><div><br></div><div><div>:- module t2.</div><div>:- interface.</div><div>:- import_module io.</div><div>
:- pred main(io::di, io::uo) is det.</div><div><br></div><div>:- implementation.</div><div><br></div><div>:- import_module list, solutions, int.</div><div><br></div><div><br></div><div>take(E, !L) :- list.delete(!.L, E, !:L).</div>
<div><br></div><div>:- pred perm(list(T), list(T)).</div><div>:- mode perm(in, out) is multi.</div><div>perm([], []).</div><div>perm(L @ [_|_], [E|EE]) :- take(E, L, L1), t2.perm(L1, EE).</div><div><br></div><div>cnt(P) = N :- </div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>promise_equivalent_solutions [N] (</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>unsorted_aggregate(P, (pred(_V::in, Acc0:int::in, Acc:int::out) is det :-</div>
<div><span class="Apple-tab-span" style="white-space:pre">                      </span>Acc = Acc0 + 1), 0, N)</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>).</div><div><br></div><div>main(!IO) :- write_int(cnt(t2.perm(1..5)), !IO).</div>
</div><div><br></div><div>I want it to show me answer=120, but getting compilation error:</div><div><br></div><div><div>Making Mercury\cs\t2.c</div><div>t2.m:011: Inferred :- pred take(T, list.list(T), list.list(T)).</div>
<div>t2.m:011: Inferred :- mode take(out, in, out).</div><div>t2.m:018: Inferred :- func cnt((pred T)) = int.</div><div>t2.m:020: In clause for `cnt(in) = out':</div><div>t2.m:020:   in call to predicate `solutions.unsorted_aggregate'/4:</div>
<div>t2.m:020:   mode error: arguments</div><div>t2.m:020:   `TypeInfo_for_T, TypeCtorInfo_19, P, V_8, V_9, N' have the</div><div>t2.m:020:   following insts:</div><div>t2.m:020:     ground,</div><div>t2.m:020:     unique(<type_ctor_info for .int/0>),</div>
<div>t2.m:020:     ground,</div><div>t2.m:020:     /* unique */(pred((ground >> ground), (ground >> ground), (free</div><div>t2.m:020:     >> ground)) is det),</div><div>t2.m:020:     unique(0),</div><div>
t2.m:020:     free</div><div>t2.m:020:   which does not match any of the modes for predicate</div><div>t2.m:020:   `solutions.unsorted_aggregate'/4.</div><div>Error: system command received signal 1.</div><div>** Error making `Mercury\cs\t2.c'.</div>
</div><div><br></div><div>Is it possible to make it work?</div><div><br></div><div>Thank you,</div><div>Vladimir</div>