在Ciao Prolog中回溯

时间:2018-05-02 14:07:01

标签: prolog

我开始用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”时会重做。

0 个答案:

没有答案