2017-10-14 17 views
1

Prologを使用して問題を解決しようとしています。制御の上でのPrologグループ化

book(title,author)を表すbook/2というファクトのリストを取得しました。

... 
book('Kamizelka', 'Boleslaw Prus'). 
book('Katarynka', 'Boleslaw Prus'). 
book('Kazania sejmowe', 'Piotr Skarga'). 
book('Konrad Wallenrod', 'Adam Mickiewicz'). 
... 

私の質問は、著者がグループ化したすべてのタイトルをリストする1つのクエリを入力する方法はありますか?私は、多くの方法の本(Any、 'author1')を入力することなく、意味します。本(任意、「著者2」)。

+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は3つの引数を取ります:

  1. 利回り、我々が興味を持っている結果(ここではBook);
  2. 目標、Prologが満たすべき目標(ここではbook(Book,Author));
  3. セット、結果セット、重複のない結果を含むリスト(ここではBooks)。
+0

これは素晴らしいです、ありがとうございます! :) – Wowo

関連する問題