我试图寻找这个但没有运气;如果问题已得到解答,请告诉我!
假设我有一个具有以下形式的键值对的二叉树:
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).
然而,SWI-Prolog 中的实现library(assoc)
是这样的:
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
显示出相同的方法差异。
为什么?我在这里想念什么?据我所知,我的版本没有创建选择点。但话又说回来,我需要削减基本情况。