Prolog 序言高于

Prolog 序言高于,prolog,Prolog,在序言中,找出谁最高的最简单方法是什么: height(lisa,1.65). height(sam,1.70). height(luke,1.92). height(nicole,1.54). height(lisa,1.65). height(sam,1.70). height(luke,1.92). height(nicole,1.54). 我想写作 tallest(X) :- Y is bigger than other Y's SWI Prolog有一些不同的方法来解决这个问题,

在序言中,找出谁最高的最简单方法是什么:

height(lisa,1.65).
height(sam,1.70).
height(luke,1.92).
height(nicole,1.54).
height(lisa,1.65).
height(sam,1.70).
height(luke,1.92).
height(nicole,1.54).
我想写作

tallest(X) :- Y is bigger than other Y's

SWI Prolog有一些不同的方法来解决这个问题,例如通过库

?由[descH]订购,高度,H。 H=1.92, P=卢克; ... 或使用图书馆:

?-聚合最大值,P,高度,H,最大值,P。 P=卢克。 不太复杂的开场白可能会提供setof/3和last/2:

?设置H:P,高度P,H,L,最后。 P=卢克, L=[1.54:nicole,1.65:lisa,1.7:sam,1.92:luke]。 还有更基本的发动机,缺少setof/3,将提供

?- height(P,H),\+((height(_,L),L>H)).
P = luke,
H = 1.92 ;

SWI Prolog有一些不同的方法来解决这个问题,例如通过库

?由[descH]订购,高度,H。 H=1.92, P=卢克; ... 或使用图书馆:

?-聚合最大值,P,高度,H,最大值,P。 P=卢克。 不太复杂的开场白可能会提供setof/3和last/2:

?设置H:P,高度P,H,L,最后。 P=卢克, L=[1.54:nicole,1.65:lisa,1.7:sam,1.92:luke]。 还有更基本的发动机,缺少setof/3,将提供

?- height(P,H),\+((height(_,L),L>H)).
P = luke,
H = 1.92 ;
有几种方法可以避免写入最大高度:

有一些方法可以避免写max_height:

假设tallestX成功了,如果而且只有当人X比所有其他人都高,我认为正确的答案是:

tallest(X) :-
    height(X, H),
    forall((height(Y, H1),
            X \= Y),
            H > H1), !.
第一种情况:

height(lisa,   1.65).
height(sam,    1.70).
height(luke,   1.92).
height(nicole, 1.54).
height(bob,    1.92). % Bob is as tall as Luke!
第二种情况:

height(lisa,   1.65).
height(sam,    1.70).
height(luke,   1.92).
height(nicole, 1.54).
height(bob,    1.92). % Bob is as tall as Luke!
假设tallestX成功的条件是,并且只有当人X比所有其他人都高,我认为正确的答案是:

tallest(X) :-
    height(X, H),
    forall((height(Y, H1),
            X \= Y),
            H > H1), !.
第一种情况:

height(lisa,   1.65).
height(sam,    1.70).
height(luke,   1.92).
height(nicole, 1.54).
height(bob,    1.92). % Bob is as tall as Luke!
第二种情况:

height(lisa,   1.65).
height(sam,    1.70).
height(luke,   1.92).
height(nicole, 1.54).
height(bob,    1.92). % Bob is as tall as Luke!

仅当height/2恰好在源中按高度排序时,setof/3才起作用?仅当height/2恰好在源中按高度排序时,setof/3才起作用?