让我定义一个谓词p/1
,例如,如下:
p(2).
p(3).
p(5).
p(7).
如何定义谓词p_list/1
,对于回溯顺序中p/1
的所有可能值列表(在上述情况下为[2, 3, 5, 7]
),该谓词会为真?
值的简单枚举是不可接受的,因为它使维护更加困难。此外,值可以隐式定义。
2 个答案:
答案 0 :(得分:2)
你可以使用bagof(X, p(X), L)
给你L = [2,3,5,7]。
“隐式定义”是什么意思?你能举个例子吗?
答案 1 :(得分:1)
maplist / 2适用于检查,而findall / 3则是Prolog中的基本列表构造函数
尝试
?- findall(X, p(X), L), maplist(p, L).