Я использую древний турбо пролог. и постоянно сталкивается с ошибкой в ​​следующем коде: - неправильное написание или не объявленный предикат - PullRequest
3 голосов
/ 22 апреля 2011
domains
    A,B,C = symbol
    N,P = integer

predicates
    tower(integer,symbol,symbol,symbol,integer)

    go

clauses
    go :- clearwindow,
          write("enter value of N (For Transfering from A To B)"),
          readint(N),
          tower(N,'a','b','c',N).

    tower(N,A,B,C,P):-
        N > 1,
        P is N-1
        tower(P,A,C,B,P),
        write([move , A,B]),nl,
        tower(P,C,B,A,P).

        tower(0,_,_,_):- !.

Ответы [ 2 ]

4 голосов
/ 22 апреля 2011

Вы пропустили запятую после P is N-1.

1 голос
/ 22 апреля 2011

Кроме того, объявления вашего домена не имеют смысла. Синтаксис не для связывания переменных с доменами (символ и целое число предопределены для вас), а скорее для создания специализированных доменов из предопределенных. Похоже, что вашей программе не нужны какие-либо объявления домена.

Учебные пособия по доменам и т. Д. В Turbo Prolog довольно редки в Интернете, так как с течением времени вам лучше всего (если вам не хватает оригинальной документации) обратиться к одному из Учебников по Visual Prolog .

...