1
我對Prolog非常陌生,試圖找到一個在二叉樹中搜索的元素,它發現它成功了,但問題是如果它沒有給出肯定的結果,我希望它說不或沒有找到。我的代碼是:在Prolog中搜索二叉樹的元素
child(1,2,3).
child(2,4,5).
child(3,6,7).
node(1,a).
node(2,b).
node(3,c).
node(4,d).
node(5,f).
node(6,f).
node(7,g).
show(X):-
write('element is found in node: '),write(X),nl.
inc(X,Y,Z):-
Y is X+X,
Z is X+X+1.
find(A):-
traverse3(1,A).
traverse3(X,A):-
check(X,A),
inc(X,Y,Z),
child(X,Y,Z),
traverse3(Y,A),
traverse3(Z,A).
check(X,A):- not(node(X,A)).
check(X,A):-
node(X,A),
show(X).
traverse3(X,A):- not(child(X,Y,Z)).
你想'find'打印出它找到的所有事件(而不是停留在每個事件),然後記住它是否在完成時發現了它? – 2014-09-22 19:22:12
一個問題是'check(X,A): - not(node(X,A))'說即使節點不存在,節點的檢查也是成功的。我發現你有這樣做是爲了讓你的'traverse3/2'按照你設計的方式工作,但我認爲'遍歷3/2'需要返工以避免這樣做。 – lurker 2014-09-22 20:07:27
你可能會考慮更常用的樹方法'tree(?leftBranch,?elem,?rightBranch)' – petrbel 2014-09-29 18:39:20