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