例は次のようになります。プロローグで順トラバーサル
node(3, nil, 14).
node(14, nil, 15).
node(15, nil, 92).
私は私のノードではなく、パラメータ
で2つの値の3を持っているとして鉱山が異なるが同様の質問がここで尋ねた見てきましたそれが実行すべきかの例:
?- inOrder(3, X).
X = [3, 14, 15, 35, 65, 89, 92] .
私の現在のコードは次のとおりです。
% the in-order traversal of a leaf is the leaf
inOrder(X, [X]) :-
node(X, nil, nil).
% if the node only has a left child, we traverse that
inOrder(x, [X|T]) :-
node(X, L, [X|T]),
inOrder(L, T).
% if the node only has a right child we traverse that
inOrder(x, [X|T]) :-
node(X, nil, R),
inOrder(R, T).
% if the node has both, we traverse them both.
inOrder(x, [X|T]) :-
node(L, X, R),
L \= nil, R \= nil,
inOrder(L, T1),
inOrder(R, T2),
append(T1, T, T2).
実際の値の代わりにfalseを返します。何かアドバイスをいただきありがとうございます!
あなたの例の 'node'sには引数のための原子がありますが、あなたのコードは3番目がリストであると仮定しているようです。 –