2017-10-14 69 views
1

我想通過使用Prolog來解決問題。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有三個參數:

  1. 的收益率,我們感興趣的結果(這裏是Book);
  2. 的目標,Prolog的目標應該滿足,(這裏book(Book,Author));和
  3. 該集合,由此產生的集合,包含沒有重複結果的列表(這裏是Books)。
+0

這是偉大的,非常感謝你! :) – Wowo