【发布时间】:2017-05-28 20:22:27
【问题描述】:
我是使用 Prolog 的新手,希望您能帮助我。
我需要使用名为listofnodes(A4,L) 的谓词获取二叉树中的所有节点。树A4 是这样制作的:
[[[[[],1,[]],5,[]],
7,
[[],3,[[],4,[]]]],
6,
[[[],10,[]],
8,
[[[],9,[]],11,[[],2,[]]]]]
并且有这种形式
好的。这听起来很简单,但我只需要使用这些构造函数和选择器来制作谓词:
empty([]).
root([_,N,_], N). %root node
hi([HI,_,_],HI). %left child
hd([_,_,HD],HD). %right child
dotree(R,HI,HD,[HI,R,HD]). %make a tree
所以我想我可以用下一个代码做到这一点,但它错了
childs(X,[L,X,R],[L,X,R]).
childs(X,[L,_,_],D) :- childs(X,L,D).
childs(X,[_,_,R],D) :- childs(X,R,D).
listofnodes([],[]).
listofnodes([[],X,[]],[X]).
listofnodes(Abn,P) :- raiz(Abn, N), childs(N,Abn,D), listofnodes(D,P).
有什么办法可以解决这个问题吗?
谢谢!
【问题讨论】:
-
什么是
raiz/2? -
但是列表中节点的顺序是什么,为什么使用这种奇怪的嵌套列表树而不是普通的
tree/3树?