% file: exam.pro % author: Robert Keller % purpose: Logical rules for passing an exam pass_exam(X) :- prepared_for_exam(X). pass_exam(X) :- easy_exam, person(X). /* Three ways to be prepared for exam */ prepared_for_exam(X) :- knows_it_all(X). prepared_for_exam(X) :- read_book(X), attended_lectures(X), \+ slept_during_lectures(X), worked_problems(X). prepared_for_exam(X) :- tutored_by(X, Y), prepared_for_exam(Y). :- dynamic easy_exam/0, attended_lectures/1, slept_during_lectures/1. /* The facts */ person(mary). person(john). person(tom). person(sally). person(fred). read_book(fred). read_book(mary). worked_problems(fred). worked_problems(mary). attended_lectures(fred). attended_lectures(mary). slept_during_lectures(fred). knows_it_all(tom). tutored_by(john, mary). tutored_by(sally, john).