我使用以下失败驱动循环来列出所有内容,而无需使用
分号。
happiness(fred,5).
happiness(john,3).
happiness(grace,2).
someGoal(X) :-
happiness(X,Y), write(Y), tab(4), fail.
在查询模式下,我得到了预期的结果
?- someGoal(_).
5 3 2
如何将这些数字插入列表中,而不是将它们写到屏幕上?
我无法在
someGoal
中处理此问题,因为回溯似乎是隐式的。
最佳答案
没错,回溯是Prolog处理替代方案的方式。
使用findall / 3,它使用“内部”回溯来收集所有替代项:
someGoal(X, Values) :-
findall(Value, happiness(X, Value), Values).
然后
?- someGoal(_, Values).
将实例值= [5、3、2]
关于prolog - 前言:失败驱动循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13057428/