/* * CS 60, Spring 2008, Assignment 8 * * Logic Database * * Due: Sunday, March 30 by 11:59 PM * * Note: This is a skeletal Prolog file, hw8.pro, which you can complete * with your own solutions. */ /* * Download your own copy of SWI-Prolog from: * * http://www.swi-prolog.org/dl-stable.html * * or run on a CS Linux server (such as knuth.cs.hmc.edu) by typing * * pl -f ...your file name here... * * after the Unix prompt. * * Get the movies database from: * * and include the following incantation in your source file: * * :- ensure_loaded('movies.pro'). */ :- ensure_loaded('movies.pro'). /* * Problem: Complete the definitions of Prolog predicates that respond to * the following queries, made to the Prolog database in the following * ensure_loaded directive. This database defines the following predicates: * * movie([Title, Year], Director, [... categories]) * * actress(Name, [Birth City, Birth State], Birthyear) * * actor(Name, [Birth City, Birth State], Birthyear) * * plays(Player, Role, [Title, Year]) * * Your predicate names must be exactly those given below, or your solutions * will not be able to pass the tests that will be applied in grading. * * Since the essence of the solutions is in your predicate definitions and * not the actual answers, we will provide the answers in test cases. * * In defining your predicates, remove the _ from the variables. These * are present for now so the compiler doesn't complain about singleton * variables, which are often the sign of an error, such as a spelling error. * */ /* * 1. directedBandits(Director) iff Director is the director of the movie * ['Bandits', 2001]. */ directedBandits(_Director) :- tbd. /* * 2. directedByBay(Movie) iff Movie is directed by 'Michael Bay'. */ directedByBay(_Movie) :- tbd. /* * 3. actressAfter1970(Actress) iff Actress was born after 1970. */ actressAfter1970(_Actress) :- tbd. /* * 4. player(Name, BirthPlace, Birthyear) iff either * actor(Name, BirthPlace, Birthyear) * or actress(Name, BirthPlace, Birthyear). */ player(_Name, _Birthplace, _Birthyear) :- tbd. /* * 5. bornInLondon(Player) iff Player was born in ['London', 'England']. */ bornInLondon(_Player) :- tbd. /* * 6. playerAndDirector(Player) iff Player is a player that directed * some movie. */ playerAndDirector(_Player) :- tbd. /* * 7. playedAndDirected(Player) iff Player is a player that directed a movie * in which he or she played. */ playedAndDirected(_Player) :- tbd. /* * 8. playedMultiple(Player) iff Player played in more than one movie. */ playedMultiple(_Player) :- tbd. /* * 9. playedInComedy(Player) iff Player played in a comedy. */ playedInComedy(_Player) :- tbd. /* * 10. playedNotDirected(Director) iff Director directed some movies, but * played in at least one movie he/she did not direct. */ playedNotDirected(_Director) :- tbd. tbd :- fail. % This will make uncompleted problems fail. /* The following will be used for testing your answers. */ test(Name, Var, Query, Desired) :- setof(Var, Query, Ans), !, ( Ans == Desired -> write('*** test '), write(Name), write(' passed'), nl ; write('*** test '), write(Name), write(' failed'), nl, write(' desired was '), write(Desired), nl, write(' actual was '), write(Ans), nl ). test(Name, _Var, _Query, []) :- !, write('*** test '), write(Name), write(' passed'), nl. test(Name, _Var, _Query, Desired) :- write('*** test '), write(Name), write(' failed'), nl, write(' desired was '), write(Desired), nl, write(' no answer produced'), nl. test(1) :- test(1, D, directedBandits(D), ['Barry Levinson']). test(2) :- test(2, M, directedByBay(M), [['Armageddon',1998], ['Pearl Harbor',2001]]). test(3) :- test(3, A, actressAfter1970(A), ['Amanda Peet','Cameron Diaz','Drew Barrymore', 'Gwyneth Paltrow','Kate Beckinsale','Liv Tyler']). test(4) :- test(4, [N, B, Y], player(N, B, Y), [['Adam Garcia',['Wahroonga','New South Wales'],1973], ['Al Pacino',['South Bronx','New York'],1940], ['Alec Guinness',['London','England'],1914], ['Amanda Peet',['New York','New York'],1972], ['Ben Affleck',['Berkeley','California'],1972], ['Ben Stiller',['New York','New York'],1965], ['Billy Bob Thornton',['Hot Springs','Arkansas'],1955], ['Bruce Willis',['Idar-Oberstein','Germany'],1955], ['Cameron Diaz',['San Diego','California'],1972], ['Cate Blanchett',['Melbourne','Australia'],1969], ['David Arquette',['Winchester','Virginia'],1971], ['Drew Barrymore',['Culver City','California'],1975], ['Gary Oldman',['London','England'],1958], ['Glenn Close',['Greenwich','Connecticut'],1947], ['Gwyneth Paltrow',['Los Angeles','California'],1972], ['Harrison Ford',['Chicago','Illinois'],1942], ['Jack Black',['Hermosa Beach','California'],1969], ['Jason Alexander',['Newark','New Jersey'],1959], ['John Cusack',['Evanston','Illinois'],1966], ['John Leguizamo',['Bogota','Colombia'],1964], ['John Malkovich',['Christopher','Illinois'],1953], ['Jose Ferrer',['Santurce','Peurto Rico'],1909], ['Josh Hartnett',['San Francisco','California'],1978], ['Kate Beckinsale',['London','England'],1973], ['Kris Kristofferson',['Brownsville','Texas'],1936], ['Liv Tyler',['Portland','Maine'],1977], ['Martin Landau',['Brooklyn','NY'],1931], ['Matt Dillon',['New Rochelle','New York'],1964], ['Nicole Kidman',['Honolulu','Hawaii'],1967], ['Steve Zahn',['Marshall','Minnesota'],1968], ['Tom Everett Scott',['East Bridgewater','Massachussets'],1970], ['Zsa Zsa Gabor',['Budapest','Hungary'],1916]]). test(5) :- test(5, L, bornInLondon(L), ['Alec Guinness','Gary Oldman','Kate Beckinsale']). test(6) :- test(6, P, playerAndDirector(P), ['Ben Stiller']). test(7) :- test(7, P, playedAndDirected(P), ['Ben Stiller']). test(8) :- test(8, P, playedMultiple(P), ['Al Pacino','Ben Affleck','Ben Stiller','Billy Bob Thornton', 'Bruce Willis','Cameron Diaz','Cate Blanchett','Drew Barrymore', 'Gary Oldman','Glenn Close','Gwyneth Paltrow','Harrison Ford', 'Jack Black','John Cusack','Kate Beckinsale','Liv Tyler', 'Martin Landau','Matt Dillon','Nicole Kidman','Steve Zahn']). test(9) :- test(9, P, playedInComedy(P), ['Adam Garcia','Amanda Peet','Ben Stiller','Billy Bob Thornton', 'Bruce Willis','Cameron Diaz','Cate Blanchett','David Arquette', 'Drew Barrymore','Gary Oldman','Glenn Close','Gwyneth Paltrow', 'Jack Black','Jason Alexander','John Cusack','John Malkovich', 'Liv Tyler','Matt Dillon','Nicole Kidman','Steve Zahn', 'Tom Everett Scott']). test(10) :- test(10, D, playedNotDirected(D), ['Ben Stiller']). /* test all solutions, by backtracking */ test :- test(_), fail; true. /* * A few Prolog gotcha's to note: * * // is not a comment symbol. It means integer division. * * The two comment forms are: * * slash-star to star-slash * * percent (%) to end-of-line * * Identifiers starting with upper-case are variables, unless they are in * single quotes '...' which may be treated as string quotes. * * Identifiers starting with lower-case are either constants or predicate * names. * * Do not use double quotes "...", as his is a shorthand for the list of * individual characters inside the double quotes. * * Using arithmetic symbols such as +, *, -, / WILL not cause evaluation * unless within the right-hand side of an 'is' expression. */