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)]