我知道如何迭代Prolog中的列表以找到最大值,但是如果每个东西都是单独的子句呢?例如,如果我有一堆猫科动物及其年龄,我怎么能找到最老的小猫?
cat(sassy, 5).
cat(misty, 3).
cat(princess, 2).
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是"嗯,最古老的猫是没有老年人存在的猫".但我真的无法将其转化为prolog.
oldest(X) :- cat(X, AgeX), cat(Y, AgeY), X \= Y, \+ AgeX < AgeY, print(Y).
Run Code Online (Sandbox Code Playgroud)
这仍然错误地匹配"有薄雾".这样做的正确方法是什么?有没有什么方法可以更直接地迭代年龄来选择最大值?
一种方法是
oldest(X) :- cat(X, AgeX), \+ Y^(cat(Y, AgeY), Y \= X, AgeX < AgeY).
Run Code Online (Sandbox Code Playgroud)
您还可以使用setof/3获取所有猫的列表并从中获得最大值.
归档时间: |
|
查看次数: |
3292 次 |
最近记录: |