Возвращение в Чао Пролог - PullRequest
0 голосов

Я начинаю изучать чистую логику и пролог с Ciao Prolog и тестирую небольшие программы для университета. Проблема в том, что я не понимаю, почему в случае сбоя следует вернуться назад, а не переходить к следующему предикату.

Вот мой код:

% numeroOriginal/3
numeroOriginal(',',_,_).

% numeroRedondeado/3
numeroRedondeado(',',_,_).

% redondeo/3
redondeado(_,numeroOriginal(',',_,_),numeroRedondeado(',',_,_)).

% redondearDecimal/3

% redondeo a las unidades -----------------------------------------------------------
% truncamiento
redondearDecimal(X,redondeoUnidad,redondeo(redondeoUnidad,numeroOriginal(',',A,B),numeroRedondeado(',',A,Bm))):-
    unidades(X,,U,[V|_]),
    less(V,s(s(s(s(s(0)))))),
    A=U,
    B=[V],
    Bm=[].
% suma a las unidades
redondearDecimal(X,redondeoUnidad,redondeo(redondeoUnidad,numeroOriginal(',',A,B),numeroRedondeado(',',Am,Bm))):-
    unidades(X,_,U,[V|]),
    reves(U,R),
    suma1(R,_,Y),
    reves(Y,Rs),
    A=U,
    B=[V],
    Am=Rs,
    Bm=[].

Моя проблема, когда я пытаюсь сделать это:

redondearDecimal([s(s(s(s(s(0))))),',',s(s(s(s(s(0)))))],redondeoUnidad,redondeo(redondeoUnidad, numeroOriginal(',',[s(s(s(s(s(0)))))],[s(s(s(s(s(0)))))]),numeroRedondeado(',', [s(s(s(s(s(s(0))))))], []))).

Этот успех, но если я изменю его на это:

redondearDecimal([s(s(s(s(s(0))))),',',s(s(s(s(s(0)))))],redondeoUnidad,redondeo(redondeoUnidad, numeroOriginal(',',[s(s(s(s(s(0)))))],[s(s(s(s(s(0)))))]),numeroRedondeado(',', A, B))).

У меня есть цикл, потому что он возвращается, когда достигает "less / 2".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...