我需要創建一個prolog謂詞from_list/2
,這樣如果我調用from_list([], T)
,我將返回一個包含list(ints)中項目的樹,目前爲止:從列表中創建一個prolog 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 2012-04-27 12:11:54
@Mog:很棒的編輯! – false 2012-04-27 17:47:25