Question
USE PROLOG LANGUAGE TO SOLVE THIS PROBLEM 2. Consider the following diagram of a family tree: [25 points] /* Database for family tree. It consists
USE PROLOG LANGUAGE TO SOLVE THIS PROBLEM
2. Consider the following diagram of a family tree: [25 points]
/* Database for family tree. It consists of facts and rules. */
/* A portion of the family tree has been implemented for you */ /* Facts */
male(kam).
male(rob).
female(ana).
female(syd). father_of(kam, rob). /* kam is the father of rob */
father_of(kam, syd). /* kam is the father of syd */
mother_of(ana, rob). /* ana is the mother of rob */
mother_of(ana, syd). /* ana is the mother of syd */ /* Rules */
is_male(X) :-
male(X);
father_of(X, _). Enter the program using a text editor, such as nano or pico, under Unix operation system and save the file as family_tree.pl. You may enter the program on your own computer using a simple editor, such as Notepad, and upload the program into your cse240prolog directory in general server. Compile the program using the Prolog command:
> gplc family_tree.pl Enter GNU Prolog programming environment by executing the Unix command " gprolog ". Execute the program family_tree by typing GNU Prolog command
|?- [family_tree]. To exit from GNU Prolog, type your end-of-file character at the main Prolog prompt ^d (Ctrl-d).
| ?- ^d Ask questions by typing, e.g.:
|?- father_of(kam, rob).
|?- mother_of(ana, syd). Please read Textbook Appendix B.4 Prolog for more detail. You can also find a complete set of GNU Prolog commands at http://www.gprolog.org/manual/gprolog.html. Now, you can start to add your code into the program. 2.1 Complete the program by adding facts and rules for the remaining members on the family tree. A portion has already been completed for you above for clarification. Please pay close attention when adding the remaining famiy members. All letters should be lowercase. [5] For all of the following questions, please label them. For example, if Question 1.0 asks you to define a rule called is_male (X) that returns "yes" (or "true") if X is the father of a member of the family, then your code should look like:
/* Question 1.0 */
is_male(X) :-
male(X);
father_of(X, _).
2.2 Define (add into the database) a rule called is_female(X) that returns "yes" (or "true") if X is a female or the mother of a member of the family. [4] Note: the system will return a "yes", if it finds a "true" answer and there exist no more true answers. The system will return "true ?" if it finds a "true" answer and there are still possibly further matches. In this case, if you type "enter", it will return "yes" and stop. If you type ";", it will continue to search for further answers.
2.3 Define a rule called parent_of(X, Y) that returns yes (or true) if X is a parent of Y. [4]
2.4 Define a rule called sibling_of(X, Y) that returns yes (or true) if X is a sibling of Y. [4]
2.5 Define one rule called grandmother_of(X, Z) that returns yes (or true) if X is a grandmother of Z and one rule called grandfather_of(X, Z) that returns yes (or true) if X is a grandfather of Z. [4]
2.6 Define a rule called descendent_of(X, Y) that returns yes (or true) if X is a descendent of Y. Note: you will need to use recursion as well as the parent rule defined above. [4]
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started