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

Prolog 给定一个表示为列表的二叉树,提供树的叶子的唯一列表,prolog,Prolog,如何使用Prolog提供唯一的树叶列表: 例如: 收益率X=[a,b,c,d]试试这个 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), my

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

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

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是否是一个列表,因此它遍历它,也遍历列表的其余部分,并将结果附加在一起


第四个案例是基本案例。

听起来像是一个家庭作业问题。你试过什么?我试过了:追加([Head | Tail],List,[Head | Result]):-append(Tail,List,Result)。非常感谢你,莫斯塔法!这个问题昨天花了我一整天的时间。。最后我使用了扁平和非成员。你的答案,如此清晰和简单。你太棒了!再次感谢!没问题,伙计。将我的答案标记为正确的解决方案也很好:)我正在努力获得一些分数;)
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([],[]).