我有一些Prolog代碼,並希望能夠跳過添加元素到結果列表,如果X和Y的產品大於某個值。任何想法我會如何去做這件事?序言,跳過基於規則添加元素到列表
例如
if Product > 10
我到目前爲止
make_quads(_,[],[]).
make_quads(X,[Y|TAIL],[[X,Y,Sum,Product]|Result]):-
make_quads(X,TAIL,Result),
Product is X * Y,
Product > 2,
Sum is X + Y.
的函數被調用的代碼如下:
?- make_quads(5, [1,2,3,4,5,6], X).
這將使以下的輸出:
X = [[5, 1, 6, 5], [5, 2, 7, 10], [5, 3, 8, 15], [5, 4, 9, 20], [5, 5, 10, 25], [5, 6, 11|...]]
我我已經嘗試了一些方法以下,但SWI-Prolog的,只要我打電話
make_quads(_,[],[]).
make_quads(X,[Y|TAIL],[[X,Y,Sum,Product]|Result]):-
make_quads(X,TAIL,Result),
Product is X * Y,
Product > 20, % I need to skip here
% Else continue running
Sum is X + Y.
你的代碼,在我看來,缺少頭部你的第二個謂語條款或有某種錯字。第二行顯示:make_quads(X,[Y | TAIL],[[X,Y,Sum,Product] |'似乎被截斷了嗎?另外,作爲Prolog中的一個術語,這些不是*謂詞*。 – lurker
您的代碼中的哪個位置定義了您不希望超過的*特定值?或者您是否打算將該參數作爲參數傳遞給謂詞調用? – lurker
我已更新說明概述了我已經嘗試過的方法,我知道產品> 20的目標,需要對其下面的代碼評估爲True,但我仍然不確定如何防止產品和總和被添加到結果列表如果產品是一個較小的值 –