我剛開始學習有關序言,我徹底困惑。初學者序言:與謂詞邏輯和(也許)語法的問題
請考慮以下情形:我有一個知識庫,其中包含關於一個人的事實,格式爲人(姓名,年齡)。
例子:
person(brad,20).
person(lindsey,15).
person(sophie,18).
person(charles,24).
我想創建一個將評估爲真時年齡總和超過40。此外,如果查詢時,它將輸出/顯示其年齡的人的名字的規則加起來是40。所以,我想這:
addsto40(X,Y,Sum) :- person(X,A), person(Y,B), Sum is A + B, Sum > 9.
當我查詢下它返回兩個人,他們的年齡加起來的數字大於40大的名字(我打,讓所有的解決方案)。查詢的示例:
?- addsto40(X,Y,Sum).
該查詢返回follwing:
X = brad,
Y = charles,
Sum = 44 ;
X = sophie,
Y = charles,
Sum = 42 ;
X = charles,
Y = brad,
Sum = 44 ;
X = charles,
Y = sophie,
Sum = 42 ;
X = Y, Y = charles,
Sum = 48.
但是,這將輸出限制爲對2。我希望它沒有限制,答案可能包括:brad,lindsey和sophie。
我嘗試了一些不成功的解決方案。我考慮過實施addsto40/3,然後添加一個人,直到總和達到40爲止。但是,這並不是我希望它工作的方式。
addsto40(X,Y,Sum) :- person(X,A), person(Y,B), Sum is A + B, Sum < 40, addper(P,Sum,Newsum).
addsto40(X,Y,Sum) :- person(X,A), person(Y,B), Sum is A + B, Sum > 40.
addper(Y,Sum,Newsum) :- person(Y,X), Newsum is Sum + X, Newsum < 40, addper(P,Newsum,someSum).
addper(Y,Sum,Newsum) :- person(Y,X), Newsum is Sum + X, Newsum > 40.
請問我能被引導到正確的方向嗎?爲什麼這不起作用?該解決方案是否以某種方式實施列表?您對prolog初學者有任何提示或技巧嗎?我很感激任何幫助。謝謝?
請幫幫我! –