[mercury-users] Tabling brokenness

Peter Hawkins hawkinsp at cs.stanford.edu
Tue Jul 18 03:19:33 AEST 2006


Hi..

The following program ostensibly computes the Towers of Hanoi:
:- module hanoi.
:- interface.
:- import_module io.

:- pred main(io::di, io::uo) is det.

:- implementation.
:- import_module int.

:- pred hanoi(int::in) is nondet.
hanoi(N) :- dohanoi(N,3,1,2).

:- pragma memo(dohanoi/4).
:- pred dohanoi(int::in, int::in, int::in, int::in) is nondet.
dohanoi(0, _, _, _).
dohanoi(N, A, B, C) :-
    N > 0,
    N1 = N - 1,
    dohanoi(N1, A, C, B),
    dohanoi(N1, C, B, A).

main(!IO) :-
    (if hanoi(100) then
        print("yes\n", !IO)
     else
        print("no\n", !IO)
    ).

Running it gives this:
$ ./hanoi
Uncaught Mercury exception:
Software Error: detected need for minimal model in pred hanoi.dohanoi/4
Stack dump not available in this grade.

Eh? dohanoi/4 can't possibly loop -- it's decreasing in the first 
argument. Am I missing something really trivial here?

Cheers,
Peter
--------------------------------------------------------------------------
mercury-users mailing list
post:  mercury-users at csse.unimelb.edu.au
administrative address: owner-mercury-users at csse.unimelb.edu.au
unsubscribe: Address: mercury-users-request at csse.unimelb.edu.au Message: unsubscribe
subscribe:   Address: mercury-users-request at csse.unimelb.edu.au Message: subscribe
--------------------------------------------------------------------------



More information about the users mailing list