如何创建一个由序言中的谓词名称组成的列表

How to create a list compose from names of a predicate in prolog

如何创建由谓词名称组成的列表 例子: 姓名(a)、姓名(b)、姓名(c)、姓名(d)

我想实现像 L=[a,b,c,d] 这样的列表。

请有人帮助我提供代码或一些建议。

findall/3 为您构建一个列表,如果谓词名称和元数已知,只需使用它来获取列表 L

?- findall(X,name(X),L).

如果谓词名称未知,可以使用 call/N,其中 N 是谓词的元数加一。例如:

?- [user].
|: a_name(a).
|: a_name(b).
|: a_name(c).
|: ^D% user://1 compiled 0.01 sec, 3 clauses
true.

?- Name =a_name,findall(X,call(Name,X),L).
Name = a_name,
L = [a, b, c].