2

いくつかの事実に基づいて、Prolog を使用している最年長の人を見つけなければなりません。例えば:

age(john, 10).
age(mary, 15).
age(rose, 75).
age(jack, 49).
age(carl, 17).
age(lucy, 66).

コンソール出力は次のようになります。

?- oldest(rose).
True.

?- oldest(X).
X = rose.

私のコードは次のとおりですが、機能していません。

oldest(P) :- age(P, X) , age(_, Y) , X >= Y.

エラーが見つかりませんが、バックトラックに関連するものだと思います。誰か助けてくれませんか?私はプロローグが初めてです。

4

2 に答える 2

3

正しいものは

oldest(P) :- age(P, X) , \+ (age(_, Y) , Y > X).

もちろん、それは上昇をもたらします...

(\+)/1not (Goal) と読み、「Goal に解決策がなければ失敗する」という意味です。

SWI-Prolog で編集すると、library( aggregate ) でこれを行うことができます。

oldest(P) :- aggregate(max(A,Pers), age(Pers,A), max(_,P)).
于 2013-10-27T16:38:22.973 に答える