Comp348 principles of programming languages assignment


PRINCIPLES OF PROGRAMMING LANGUAGES ASSIGNMENT-

Question 1: Briefly explain these main programming paradigm (Logic, Functional, Object Oriented, Procedural, Imperative and Aspect-oriented), and for each of these paradigms name at least one language that can be used for programming in that paradigm. 

Question 2:  Which of the following pairs of terms can be unified (matched) together? Where relevant, give the variable instantiations that lead to successful unification.  (Note = shows unification)

healtyFood(X) = healtyFood(bread)

healtyFood(bread,X) = healtyFood(Y,salad)

healtyFood(bread,X,milk) = healtyFood(Y,salad,X)

healtyFood(X) = Y

meal(healtyFood(bread),drink(milk)) = meal(X,Y)

meal(healtyFood(bread),drink(milk)) = meal(X, drink(Water))

meal(healtyFood(bread), Y) = meal(X, drink(water))

breakfast(healtyFood(bread),egg,milk)= breakfast(healtyFood(Y),Y, Z)

Question 3: The Purpose of this question is to write a Prolog Program which describes a directed graph (G), with the following structure (shown below) and allows us to ask some questions about this graph.

1153_Figure.png

A) Write all possible node and edge facts that describes the structure of this graph G such as below:

node( a ).  %  "a" is a node of this graph.

edge( a, b ).  % There is an edge (directed) from node "a" to "b".

B) Complete the definition all these rules.

node(X) :-  %  X is a node in graph G

edge( X, Y) :- % There is an directed edge from X to Y.   

parent( X, Y) :- %  There is a directed edge from X to Y.

child(X, Y) :- %  Y is parent of X.

path( X, Y) :- % find a directed path from node X to node Y.

length_of_path( X, Y):- % Length of a path (directed) from X to Y.

connected(  X, Y):- % There is a directed path from X to Y, or from Y to X

undirected_edge( X, Y) :-  /* There is  an edge (ignoring the directions) from X to Y or from Y to X     */

undirected_path( X, Y):- /* find a path  (ignoring the directions) from node X to node Y.  */

C) Create a knowledge base (KB) based on all the facts and rules you have written in parts (A), and (B), and save it in a prolog program file called "my_grapghG.pl", and show a printout of your file here.

D) Run this Prolog program, and write 4 queries about each of those rules that you have created in part B in order to test those rules, and show your queries and their results, and test the correctness of your results.

(Note: you should write and test two ground quires (one with positive and one with negative answer) and two non-ground quires for each of the rules that you have created in Part B.)

E) Add the following rule to your program, and test it and describe its function?

Question 4: Assume we have the following knowledge base in a Prolog program:

man(jack).

man(peter).

woman(rebeca).

woman(julia).

woman(maria).

hasWand(rebeca).

hasWand(maria).

hasWand(jack).

quidditchPlayer(jack).

quidditchPlayer(rebeca).

quidditchPlayer(maria).

quidditchPlayer(peter).

playsAirGuitar(julia).

playsAirGuitar(adam).

playsAirGuitar(rebeca).

playsAirGuitar(mary).

playsAirGuitar(jack).

wizard (jack).

hasBroom(X) :- quidditchPlayer(X).

warlock(X) :- man(X), hasBroom(X), hasWand(X).

witch(X) :- woman(X), hasBroom(X), hasWand(X).

wizard(X):- warlock(X) ; witch(X).   % note: semicolon was used here

A) Determine type of each of the following queries (ground/non-ground), and explain what will Prolog respond for each of these queries (write all the steps of unifications and resolutions for each query)? 

?  -wizard(jack).

? -witch(jack).

? -warlock(jack).

? -witch(maria).

? -warlock(Y).

? -witch(Y).

? -wizard(X).

? -hasBroom(X).

? -playsAirGuitar(Y), witch(Y).

B) Implement your facts & rules as a Prolog program and test all quires in part B. 

Question 5: Write the following rules for lists in a Prolog program and try corresponding queries for each case.

A) my_length(List, Nr).  % find the length of a given list.

?- my_length([a,b,[c,d], e, [f, g]],R).

?- my_length( [ [ ], [ ] ], R).

?- my_length( [ [ [ ] ] ], R).

?- my_length([a,b,[c,d],e],4).

B) my_append(L1,L2,New_list).  % append two given lists L1, L2, and return a new list.

?- myappend([a,b],[c],R).

?- myappend( _ ,[e,s],[f,o,x,e,s]).    

?- myappend(X,[e,s],[f,o,x,e,s]).  

?- myappend(X,Y,[a,b,c]).

C) mymember(X, L).    % test if X is a member of list L. 

?- mymember( a, [ [ ], a, b, c, f]).

?- mymember( X, [ [ ], a, b, c, f]).

?- mymember( [m k], [ [m k], a, b, c, f]).

?- mymember( X, [ [ ], [ [ ] ] , a, b, c, f]).

Attachment:- Assignment.rar

Request for Solution File

Ask an Expert for Answer!!
Programming Languages: Comp348 principles of programming languages assignment
Reference No:- TGS01655713

Expected delivery within 24 Hours