我有一些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,但我仍然不确定如何防止产品和总和被添加到结果列表如果产品是一个较小的值 –