我正在尝试使用findall / 3谓词来查找条件不正确的所有结果。然后我想切树以提高效率。 示例:
test(ListResult):-
findall(Alpha,
( between(1,7,X),
recu(X,Alpha,Beta),
write('Alpha'),write(Alpha),write('Beta'),write(Beta),
Alpha>Beta,
write('cut'),
!
),
ListResult).
recu(X,Alpha,Beta):-
random(0,5,A),
random(0,5,Beta),
Alpha is A+X.
它在好时间切断,但在Alpha>Beta
条件为真时逻辑上只保存数字。
实际结果:
Alpha1Beta3Alpha2Beta2Alpha3Beta1cut
ListResult = [3]
通缉结果:
Alpha1Beta3Alpha2Beta2Alpha3Beta1cut
ListResult = [1,2,3]