バイナリ ツリーの最も深い要素を見つけたいのですが、これまでのところ、コードは空のツリーまたは高さが 1 の場合にのみ機能します。
これが私の高さ関数が正しく機能するコードです。
deepest(node(L,X,R),X):- height(L,0),height(R,0).
deepest(node(L,_,R),X):- height(L,D1),height(R,D2), D1 > D2, deepest(L,X).
deepest(node(L,_,R),X):- height(L,D1),height(R,D2), D1 =< D2, deepest(R,X).
編集:例
?- deepest(node(node(node(leaf,8,leaf),20,leaf),
30,
node(node(leaf,88,leaf),33,node(leaf,888,leaf))),
X).
X = 8 ;
X = 88 ;
X = 888 ;
false.