给定表示为列表的二叉树,提供树的叶子的唯一列表

时间:2017-04-28 19:28:08

标签: prolog

如何使用Prolog提供树的叶子的唯一列表:
例如:

mytreeunique([a,[b,[a,[c,d]]]],X). 

收益率X=[a,b,c,d]

1 个答案:

答案 0 :(得分:0)

试试这个

mytreeunique([H|T],[H|R]):-
\+is_list(H),
mytreeunique(T,R),
\+member(H,R).

mytreeunique([H|T],R):-
\+is_list(H),
mytreeunique(T,R),
member(H,R).

mytreeunique([H|T],R):-
is_list(H),
mytreeunique(H,R1),
mytreeunique(T,R2),
append(R1,R2,R).

mytreeunique([],[]).    

首先检查head是否为元素,如果尚未添加,则将其添加到结果中。

如果已经在结果中,则第二种情况会跳过H。

第三种情况检查Head是否为列表,因此它遍历它并且还遍历列表的其余部分并将结果附加在一起。

第四种情况是基本情况。