Prolog,结果正确给出,但打印错误

时间:2018-08-18 08:59:39

标签: prolog dcg prolog-toplevel prolog-cut

例如,我有以下函数来计算二叉树中所有内部节点的集合(具有至少一个子节点(即没有叶子)的节点)

internals(nil,[]).
internals(t(_,nil,nil),[]).
internals(t(X,L,nil),[X|S]) :- L = t(_,_,_), internals(L,S).
internals(t(X,nil,R),[X|S]) :- R = t(_,_,_), internals(R,S).
internals(t(X,L,R),[X|S]) :- L = t(_,_,_), R = t(_,_,_), 
   internals(L,SL), internals(R,SR), append(SL,SR,S).

结果是

?- internals(t(3, t(2, t(1, nil, nil), nil), t(5, nil, t(7, nil, nil))), X).
X = [3, 2, 5] ;
false.

为什么它以false结尾,下面的代码如何做到相同但不会导致false

internals(nil,[]).
internals(t(_,nil,nil),[]) :- !.
internals(t(X,L,R),[X|Xs]):-
    internals(L,LI), internals(R,RI),
    append(LI,RI,Xs).

?- internals(t(3, t(2, t(1, nil, nil), nil), t(5, nil, t(7, nil, nil))), X).
X = [3, 2, 5].

0 个答案:

没有答案