Mercurial > repos > other > SevenLanguagesInSevenWeeks
changeset 56:2bbb377ddeb0
Add more examples, more thoughts and a three-argument "collaborated" rule
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Tue, 26 Sep 2017 20:45:26 +0100 |
parents | 3a20e8b49bc4 |
children | c9873b78e8c2 |
files | 3-Prolog/day1-self-study.pl |
diffstat | 1 files changed, 15 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/3-Prolog/day1-self-study.pl Tue Sep 26 20:26:45 2017 +0100 +++ b/3-Prolog/day1-self-study.pl Tue Sep 26 20:45:26 2017 +0100 @@ -1,26 +1,38 @@ % Make a KB of books and authors and query it. book(the_long_earth). book(night_watch). +book(science_of_discworld). book(lord_of_the_rings). book(route_666). book(krokodil_tears). author(terry_pratchett). author(stephen_baxter). +author(jack_cohen). +author(ian_stewart). author(jrr_tolkein). author(jack_yeovil). wrote(terry_pratchett, the_long_earth). wrote(stephen_baxter, the_long_earth). wrote(terry_pratchett, night_watch). +wrote(terry_pratchett, science_of_discworld). +wrote(jack_cohen, science_of_discworld). +wrote(ian_stewart, science_of_discworld). wrote(jrr_tolkein, lord_of_the_rings). wrote(jack_yeovil, route_666). wrote(jack_yeovil, krokodil_tears). -collaborated(Author1, Author2) :- \+(Author1 = Author2), author(Author1), author(Author2), +collaborated(Author1, Author2, Book) :- \+(Author1 = Author2), author(Author1), author(Author2), wrote(Author1, Book), wrote(Author2, Book), book(Book). + +collaborated(Author1, Author2) :- collaborated(Author1, Author2, Book). % collaborated(terry_pratchett, stephen_baxter). returns true, but collaborated(Author1, Author2). just says "no", as does -% collaborated(terry_pratchett, OtherAuthor). - for some reason it isn't filling in answers. +% collaborated(terry_pratchett, OtherAuthor). - for some reason it isn't filling in answers. It does, however, correctly +% say that Pratchett never collaborated with Pratchett. % % If I remove "\+(Author1 = Author2)" then it successfully returns stephen_baxter for terry_pratchett but also returns % Pratchett himself as a valid answer as well. % -% wrote(terry_pratchett, Book). works to return all books by an author, though. \ No newline at end of file +% wrote(terry_pratchett, Book). works to return all books by an author, though. +% +% However, having added a three-argument version, it can correctly identify the books that someone collaborated on if +% you supply both authors. \ No newline at end of file