3

これを検索しようとしましたが、運がありませんでした。質問が回答されているかどうか教えてください!

次の形式のキーと値のペアを持つバイナリ ツリーがあると仮定します。

  • 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

なんで?ここで何が欠けていますか?私が見る限り、私のバージョンは選択ポイントを作成していません。しかし、やはり、ベースケースをカットする必要があります。

4

1 に答える 1