プロログ述語from_list/2
を作成して、from_list([], T)
を呼び出すと、これまでのリスト(ints)の項目を含むツリーを返すようにする必要があります。リストからプロローグBSTを作成し、パラメータで返す
from_list([], empty).
from_list([X], T) :-
insert(X, empty, T).
from_list([X|Y], T) :-
from_list(Y, NT),
insert(X, NT, T).
編集:考え出しましたが、リストの逆順でツリーに追加しています。どんな助け?
ここに私の挿入述語がありますが、うまくいくようです。
insert(X, empty, bt(X, empty, empty)).
insert(X, bt(X2, L, R), bt(X2, NL, R)) :-
X < X2,
!,
insert(X, L, NL).
insert(X, bt(X2, L, R), bt(X2, L, NR)):-
insert(X, R, NR).
ではなく、また、私はプロローグが適切に使用される非常にエレガントなスタイル...と、このコードを持って知っている答え
を必要としない第二、はるかに小さい問題...そうエレガントではありません...
is_search(empty).
is_search(bt(_, empty, empty)).
is_search(bt(X, empty, bt(Y,LEFT,RIGHT))) :-
X < Y,
is_search(LEFT),
is_search(RIGHT).
is_search(bt(X, bt(Y,LEFT,RIGHT), empty)) :-
X > Y,
is_search(LEFT),
is_search(RIGHT).
is_search(bt(X, bt(Y,L1,R1), bt(Z, L2, R2))) :-
X > Y,
X < Z,
is_search(bt(Y, L1, R1)),
is_search(bt(Z, L2, R2)).
これを少しきれいにする方法についてのヒントを教えてください。
あなた自身を次回にインデントしてみてください! – m09
@Mog:素晴らしい編集! – false