Prolog-如何将数据从数据库(断言)传递到列表中?

Prolog-如何将数据从数据库(断言)传递到列表中?,prolog,Prolog,基本上,我使用assert断言了几个结构 可以通过查询列表(myData)来列出此数据库。,它会打印如下内容(在控制台中): 我想知道是否有办法创建一个“返回”包含所有这些元素的列表的规则 因此,我应该能够以[动物(猫)、动物(鸟)、动物(人)、动物(大象),…]的形式列出一个列表。 提前谢谢。(请不要问我为什么要这样做)这里有一个小例子,演示了在各种生成器中使用bagof和findall: :-initialization(main). animal(cat). animal(bird).

基本上,我使用
assert
断言了几个结构

可以通过查询
列表(myData)来列出此数据库。
,它会打印如下内容(在控制台中):

我想知道是否有办法创建一个“返回”包含所有这些元素的列表的规则

因此,我应该能够以
[动物(猫)、动物(鸟)、动物(人)、动物(大象),…]的形式列出一个列表。


提前谢谢。(请不要问我为什么要这样做)

这里有一个小例子,演示了在各种生成器中使用
bagof
findall

:-initialization(main).

animal(cat).
animal(bird).
animal(human).
animal(elephant).

main :- 
  write("bagof animal(_)      : "),bagof(animal(X), animal(X), Bag), write(Bag), nl,
  write("bagof generator(42,_): "),bagof(generator(42, Y), animal(Y), Bag2), write(Bag2), nl,
  write("bagof _              : "),bagof(Y, animal(Y), Bag4), write(Bag4), nl,
  write("findall gen(35,_)    : "),findall(gen(35, Z), animal(Z), Bag3), write(Bag3), nl,
  halt.
输出:

bagof animal(_)      : [animal(cat),animal(bird),animal(human),animal(elephant)]
bagof generator(42,_): [generator(42,cat),generator(42,bird),generator(42,human),generator(42,elephant)]
bagof _              : [cat,bird,human,elephant]
findall gen(35,_)    : [gen(35,cat),gen(35,bird),gen(35,human),gen(35,elephant)]
F=animal(uu),findall(F,F,Fs)
bagof animal(_)      : [animal(cat),animal(bird),animal(human),animal(elephant)]
bagof generator(42,_): [generator(42,cat),generator(42,bird),generator(42,human),generator(42,elephant)]
bagof _              : [cat,bird,human,elephant]
findall gen(35,_)    : [gen(35,cat),gen(35,bird),gen(35,human),gen(35,elephant)]