2015-04-27 2 views
0

В принципе, я утверждал несколько структур, используя assert.Prolog - Как передать данные из базы данных (утвержденных) в список?

Эта база данных может быть перечислены запрашивая listing(myData)., и было бы напечатать что-то вроде (в консоли):

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

Я хочу знать, если есть способ, которым я могу создать правило, которое «возвращает» список, содержащий все эти элементы.

Так что я должен быть в состоянии иметь список с формой [animal(cat), animal(bird), animal(human), animal(elephant), ...]

Спасибо заранее. (Пожалуйста, не спрашивайте, почему я хочу это сделать)

+1

'F = животное (_), findall (F, F, Fs) ' – false

ответ

0

Вот небольшой пример, который демонстрирует использование 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)]