使用var(X)的Prolog二叉树

时间:2015-02-01 20:25:56

标签: prolog

我构建了二叉树结构,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).

我试过但它看起来不对。

1 个答案:

答案 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 
.