我知道如何遍歷Prolog中的列表來查找最大值,但是如果每個東西都是單獨的子句呢?例如,如果我有一羣貓和他們的年齡,我怎麼會找到最老的貓?由prolog子句定義的值的最大值
cat(sassy, 5).
cat(misty, 3).
cat(princess, 2).
我的第一個想法是「嗯,最古老的貓是沒有老年人存在的貓」。但我無法真正把它翻譯成序言。
oldest(X) :- cat(X, AgeX), cat(Y, AgeY), X \= Y, \+ AgeX < AgeY, print(Y).
這仍然錯誤地匹配「薄霧」。什麼是正確的方法來做到這一點?有沒有什麼方法可以更直接地迭代幾年來選擇最大值?
'^'做什麼?當我使用這個事實時,我得到了'未定義的過程:^/2只能作爲setof/3和bagof/3的第二個參數出現。' – daniel451
'^'是一個存在量詞。看起來你的Prolog系統(SWI?)將其用於'setof/3'和'bagof/3'。在這裏你並不需要'Y ^',這只是一種習慣的方式來強調'Y'在否定之內存在量化(「沒有比Y更早的貓Y」)。 – starblue
是的,SWI-Prolog。感謝您的解釋。據我所知,它確實沒有'Y ^'的作品。 – daniel451