% file:    exam.pl
% author:  keller
% purpose: Logical rules for passing an exam

:- ensure_loaded(enumerate).

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).
