我正在尝试使用Prolog来解决问题。
我得到了一个事实列表book/2
,代表book(title,author)
。
...
book('Kamizelka', 'Boleslaw Prus').
book('Katarynka', 'Boleslaw Prus').
book('Kazania sejmowe', 'Piotr Skarga').
book('Konrad Wallenrod', 'Adam Mickiewicz').
...
我的问题是:有没有办法输入一个查询来列出所有按作者分组的标题?我的意思是,没有输入多种方式的书(任何,'author1')。书(任何, 'author2')。
答案 0 :(得分:0)
是的,您可以使用setof/3
谓词:
group_author(Author,Books) :-
setof(Book,book(Book,Author),Books).
如果我们查询它,我们获得:
?- group_author(Author,Books).
Author = 'Adam Mickiewicz',
Books = ['Konrad Wallenrod'] ;
Author = 'Boleslaw Prus',
Books = ['Kamizelka', 'Katarynka'] ;
Author = 'Piotr Skarga',
Books = ['Kazania sejmowe'].
setof/3
有三个参数:
Book
); book(Book,Author)
);和Books
)。