I'm sure you get this a lot, but how can I ask Mercury to do something with all the solutions that it finds for some predicate?  At this point I'd just like to print out all of my solutions, but I'm sure there are better things to do then that.
<br><br>I've started with one of the programs in the Ralph Becket's tutorial and produced the below.  I've messed around a little with the solutions module, but haven't gotten any where.<br><br>Thanks in advance, and sorry to bother the list with what feels like a newbie question.  If answers to questions like these can be found somewhere, please let me know where to look.
<br><br>:- module first.<br>:- interface.<br>:- import_module io.<br><br>:- pred main(io::di, io::uo) is cc_multi.<br><br>:- implementation.<br>:- import_module int, list, string. <br><br>main(!IO) :-<br>    io.format("DOG + ANT = CAT\n", [], !IO),
<br>    ( if<br>        dogAntCat(DOG, ANT, CAT)<br>    then<br>        io.format("%d + %d = %d\n", [i(DOG), i(ANT), i(CAT)], !IO)<br>    else<br>        io.format("No result.", [], !IO)<br>    ).<br><br>
:- pred dogAntCat(int::out, int::out, int::out) is nondet.<br>dogAntCat(DOG, ANT, CAT) :-<br>    ( if<br>        D0 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], C0 = 0,<br>        pick(D0, G, D1),<br>        pick(D1, T, D2),<br>        T = (G + T + C0) mod 10, C1 = (G + T + C0) / 10,
<br>        pick(D2, O, D3),<br>        pick(D3, N, D4),<br>        A = (O + N + C1) mod 10, A\=0, C2 = (O + N + C1) / 10,<br>        pick(D4, D, D5),<br>        pick(D5, A, D6),<br>        C = (D + A + C2), D \= 0, 0  = (D + A + C2) / 10,
<br>        pick(D6, C, _)<br>    then<br>        DOG = 100 * D + 10 * O + G,<br>        ANT = 100 * A + 10 * N + T,<br>        CAT = 100 * C + 10 * A + T<br>    else<br>        fail<br>    ).<br><br>:- pred pick(list(int)::in, int::out, list(int)::out) is nondet.
<br>pick([X | Xs], X, Xs).<br>pick([X | Xs], Y, [X | Zs]) :- pick(Xs, Y, Zs).<br><br><br>