프롤로그 조건부를 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