これを検索しようとしましたが、運がありませんでした。質問が回答されているかどうか教えてください!
次の形式のキーと値のペアを持つバイナリ ツリーがあると仮定します。
t/0
: 空のツリーt/4
: ツリー ノードt(Key, Value, Left, Right)
ここで、最初の (最小) 要素を取得したいと思います。(私にとって)明らかな実装は次のとおりです。
min0(t(K,V,t,_), K, V) :- !.
min0(t(_,_,L,_), K, V) :- min0(L, K, V).
library(assoc)
ただし、SWI-Prolog での実装は次のようになります。
min(t(K,V,L,_), Key, Val) :- min(L, K, V, Key, Val).
min(t,K,V,K,V).
min(t(E,K,V,_), _, _, Key, Val) :- min(L, K, V, Key, Val).
と同様の他の操作は、アプローチの同じ違いmax
を示します。get
なんで?ここで何が欠けていますか?私が見る限り、私のバージョンは選択ポイントを作成していません。しかし、やはり、ベースケースをカットする必要があります。