有人可以帮我解决Prolog中的问题。我想遍历一棵树InOrder。我设法在postOrder中这样做,因为它看起来很狡猾,但我不知道如何在inOrder中更改它。我只假设我的代码有效,因为我不知道如何在Goal部分声明一个树。任何人都可以帮助我。到目前为止,这是我的代码:
domains
elem=integer
tree=tr(elem,tree,tree);nil
list=elem*
predicates
preorder(tree,list)
conc(list,list,list)
clauses
conc([],L,L).
conc([X|L1],L2,[X|L3]):-
conc(L1,L2,L3).
preorder(nil,[]).
preorder(tr(R,LEFT,RIGHT),L):-
preorder(RIGHT,L1),
preorder(LEFT,L2),
conc([R],L2,L3),
conc(L3,L1,L)
答案 0 :(得分:1)
domains
部分的似乎需要更改
preorder(arb(R,LEFT,RIGHT),L):-
...
到
preorder(tr(R,LEFT,RIGHT),L):-
...
编辑基本上,访问顺序没有影响,因为你没有“做”任何与树'数据...你可以只更改浓缩以获得一个inorder列表。为了讨论,让我们重命名谓词(记得在predicates
部分中声明它):
inorder(nil,[]).
inorder(tr(R,LEFT,RIGHT),L):-
inorder(LEFT,L1),
conc(L1,[R],X),
inorder(RIGHT,L2),
conc(X,L2,L).
产量
11 ?- inorder(tr(1,tr(2,tr(4,nil,nil),nil),tr(3,nil,nil)),L).
L = [4, 2, 1, 3].