如何获取可能的谓词值列表

时间:2012-11-17 14:18:16

标签: prolog

让我定义一个谓词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).