(defun grade (student) (cond ((excellent-work student) :a+) ((okay-stuff student) (if (tried-hard student) :b :b-)) (t :c)))
grade(#student{work=Work, tried_hard=Tried}) -> grade1(Work, Tried). grade1(excellent_work, _) -> 'a+'; grade1(okay_stuff, yes) -> b; grade1(okay_stuff, _) -> 'b-'; grade1(_, _) -> c.
grade(Student, Grade) :- worked(Student, Work), work_grade(Work, Student, Grade). work_grade('Excellent', _, 'A+'). work_grade('Okay', Student, 'B') :- tried_hard(Student). work_grade('Okay', _, 'B-'). work_grade(_, _, 'C').
dostuff(x)
(dostuff x)