Introduction to Prolog programming

1. Write a query which returns all student names (first and last name), which were born in 1990.

(hint: use _ in place of those variables which are not to be shown).

2. Write a query which returns all student names which were born before 1990.

3. Write a query which returns all student names which were admitted before 2005.

4. Define a predicate under18/1 which describes those student ids which had at most 18 years when admitted.

Hint: use =<

5. Define a predicate which is satisfied if a student Ids failed to pass at least two different lectures.

6. Define a predicate which is satisfied if at least one student graduated the lecture.

Consider the following representation of natural numbers (from our last lecture):

nat(zero).
nat(X) :- X = succ(Y), nat(Y).

7. Implement the predicate add/3 which adds two natural numbers.

8. Implement the predicate minus/3 which substracts one natural number from another. Substraction only needs to work as long as the result is a natural number.

Consider the following conversion predicates between naturals and Prolog integers.

toNat(0,zero).
toNat(X,succ(Res)) :- X>0, Xp is X-1, toNat(Xp,Res). 
 
fromNat(zero,0).
fromNat(succ(X),R) :- fromNat(X,Rp), R is Rp + 1. 

9. Implement min/3 which computes the minimum of two natural numbers. Example usage:

-? toNat(7,X), toNat(4,Y), min(X,Y,R), fromNat(R,O).

10. Implement max/3 which computes the maximum of two natural numbers.

11. Implement gt/2 which is satisfied if the first natural number is strictly greater than the second.

12. Implement leq/2 which is satisfied if the first natural number is less than or equal to the second.

13. Implement div/3 which implements the div operator.

14. Implement mod/3.

15. Implement gcd/3 which computes the greatest common divisor of two natural numbers.

Appendix

Use the following samples for testing: ​

%student_info(Id,First_Name,Last_Name,BirthYear)
student_info(9,"John","Mike",1990).
student_info(10,"Andrew","Jackson",1990).
student_info(11,"Itachi","Carter",1991).
student_info(12,"Luna","Ethan",1989).
student_info(13,"Everly","James",1988).
 
%student(Id,AdmissionYear)
student(9,2004).
student(10,2005).
student(11,2006).
student(12,2003).
student(13,2007).
 
%studies(Id,Lecture)
studies(9,aa).
studies(10,pp).
studies(11,lfa).
 
%grade(Id,Lecture,Grade)
grade(10,pp,4).
grade(9,pp,6).
grade(10,aa,4).
grade(11,lfa,10).