2

让我p/1定义一个谓词,例如,如下所示:

p(2).
p(3).
p(5).
p(7).

如何定义一个谓词,该谓词对于回溯顺序中(在上述情况下 - )p_list/1的所有可能值的列表是正确的?p/1[2, 3, 5, 7]

简单枚举值是不可接受的,因为它使维护更加困难。此外,可以隐式定义值。

4

2 回答 2

3

你可以使用bagof(X, p(X), L)它给你 L = [2,3,5,7]。“隐式定义”是什么意思?能给我举个例子吗。

于 2012-11-17T15:33:25.043 回答
2

maplist /2 适用于检查,而findall /3 它是 Prolog 中的基本列表构造函数

尝试

?- findall(X, p(X), L), maplist(p, L).
于 2012-11-17T18:45:11.467 回答