我构建了二叉树结构,binarytree(Data,LeftSub,RightSub)。
istree(nil).
istree(binarytree(_,L,R)) :- istree(L), istree(R).
但是,我希望使用内置的谓词var(X)通过未实例化的变量而不是istree(nil)来表示空树。
istree(D) :- var(D).
istree(binarytree(D,_,_)) :- var(D).
istree(binarytree(D,L,R)) :- not(var(D)).
istree(binarytree(D,L,R)) :- not(var(D)), istree(L), istree(R).
我试过但它看起来不对。
答案 0 :(得分:0)
断言一组条款的真实性和虚假性可能会有问题。我认为你只能陈述积极的情况,并让Prolog失败:
istree(T) :-
nonvar(T),
T = t(_,L,R),
(var(L) ; istree(L)),
(var(R) ; istree(R)).
我缩短了仿函数,以便于测试
8 ?- istree(t(a,_,_)).
true
.
9 ?- istree(t(a,t(b,_,_),_)).
true
.
10 ?- istree(t(a,t(b,_,_),t(c,_,_))).
true
.