List 在Prolog中查找二叉树偶数级的元素

List 在Prolog中查找二叉树偶数级的元素,list,prolog,binary-tree,dcg,List,Prolog,Binary Tree,Dcg,我试图找到在二叉树中处于偶数级别的所有元素,并将它们放在一个列表中。 这就是我所尝试的: concat([],L,L). concat([H|T], L, [L|LRez]) :- concat(T,L,LRez). find(R, t(_, R, _), 0). find(X, t(S, R, D),P) :- X < R, find(X, S, P1), P is P1+1. find(X, t(S, R, D),P) :- X >= R,find(X, D, P2), P i

我试图找到在二叉树中处于偶数级别的所有元素,并将它们放在一个列表中。 这就是我所尝试的:

concat([],L,L).
concat([H|T], L, [L|LRez]) :- concat(T,L,LRez).

find(R, t(_, R, _), 0).
find(X, t(S, R, D),P) :- X < R, find(X, S, P1), P is P1+1.
find(X, t(S, R, D),P) :- X >= R,find(X, D, P2), P is P2+1.

level(T, LRrez):- lvl(T, T, LRez).
lvl(nil, nil, []).
lvl(T, t(S,R,D),[R|LRez] ) :- find(R,T,P), even(P), lvl(T, S, LRez1), lvl(T,D,LRez2), 
                        concat(LRez1,LRez2,Lrez).
lvl(T,t(S,R,D),LRez) :- find(R,T,P), \+even(P), lvl(T, S, LRez1), lvl(T, D,LRez2), 
                        concat(LRez1,LRez2,Lrez).
concat([],L,L)。
concat([H | T],L[L | LRez]):-concat(T,L,LRez)。
查找(R,t(u,R,u),0)。
find(X,t(S,R,D),P):-X=R,find(X,D,P2),P是P2+1。
标高(T、LRrez):-lvl(T、T、LRez)。
lvl(零,零,[])。
lvl(T,T(S,R,D),[R|LRez]):-查找(R,T,P),偶数(P),lvl(T,S,LRez1),lvl(T,D,LRez2),
concat(LRez1、LRez2、Lrez)。
lvl(T,T(S,R,D),LRez):-查找(R,T,P),\+偶数(P),lvl(T,S,LRez1),lvl(T,D,LRez2),
concat(LRez1、LRez2、Lrez)。
我使用
find
查找树中的数字级别,我甚至在前面就定义了这个级别。这是行不通的。 提前感谢。

使用

如果DCG对你来说是新的,那就从阅读内容丰富而又简洁的DCG开始吧

使用

如果DCG对你来说是新的,那就从阅读内容丰富而又简洁的DCG开始吧

take_even(nil) --> []. take_even(t(L,M,R)) --> [M], skip_odd(L), skip_odd(R). skip_odd(nil) --> []. skip_odd(t(L,_,R)) --> take_even(L), take_even(R).
?- phrase(take_even(t(nil,0,t(nil,1,t(nil,2,nil)))), Es).
Es = [0, 2].