# Simple Prolog

Not what you're looking for?

PROLOG

Due 7/10

NOTE: For your homework, you are not allowed to use the builtin predicate

definitions. If, for example, you want to use member/2, create you own

version called mymember/2 (or something). Same for append, reverse,

sort, and many others.You may use any builtin numeric operators, 'is', the '[' ']'

brackets for lists, fail, not, and maybe some others

• (5) In Prolog, implement the predicate cube/2. This predicate will relate a list of numbers to a list of numbers that, for each number in the first list, contains the number, the square of the number, and the cube of the number. The only modes for this predicate are: cube(+,-), and cube(+,+). E.g.,

?- cube([2,1,4],A).

A = [2,4,8,1,1,1,4,16,64]

?- cube([],[]).

yes.

?- cube([5],[5,25,125]).

yes.

?- cube([2,3],[2,3,4]).

no.

• (5) In Prolog, implement the predicate dotProduct/3. This predicate will relate two vectors (represented as lists) to their dot product. The only modes for this predicate are: dotProduct(+,+,-), and dotProduct(+,+,+). E.g.,

?- dotProduct([1,2,3],[5,5,5],A).

A = 30

?- dotProduct([2],[12],24).

yes.

?- dotProduct([],[0],0).

yes.

?- dotProduct([2,3],[2,3,4],17).

no.

• (45) In Prolog, create an ADT for Sets. Each Set will be represented as a list of unique atoms. Assume the same semantics as in Hw3.

o (5) setAddElt(E,S1,S2).

S2 = S1 Union {E}

Assume modes: setAddElt(+,+,-), and SetAddElt(+,+,+).

o (5) setDelElt(E,S1,S2).

S2 = S1 - {E}

Assume modes: setDelElt(+,+,-), and SetDelElt(+,+,+).

o (5) setMember(E,S).

return E element-of S

Assume any mode.

o (10) setEqual(S1,S2).

return S1 == S2 (in Prolog)

Assume modes: setEqual(+,+).

o (10) SetUnion(S1,S2,S3).

S3 = S1 Union S2

Assume modes: setUnion(+,+,-), and SetUnion(+,+,+).

o (10) Set Intersect(S1,S2,S3).

S3 = S1 Intersection S2

Assume modes: setIntersect(+,+,-), and SetIntersect(+,+,+).

• (20) Because Prolog's search engine has the ability to backtrack to find a solution, Prolog can easily be used to implement a top-down parser.

o Assume the following Context-Free-Grammar (CFG) for Boolean Expressions, with start symbol E.

E --> A or E | A

A --> B and A | B

B --> not B | C

C --> '(' E ')' | true | false

o Using Prolog, construct a top-down parser that can be used to parse and evaluate arbitray Boolean expressions. e.g.,

?- parse(['(',true,and,false,')',or true],V).

V = true.

?- parse([true,or,true,and,false],V).

V = true.

?- parse([true,or,or,true,or,false],V).

No.

o Hint: Create a different predicate for each nonterminal in the grammar.

• (25) Assume, you only have the numbers 1, 2, 3, and 4. Further assume that you only have the operators '+' and '*'. Lastly, assume that you can only use a number once.

o Using Prolog, determine the number of arithmetic expressions that can be create to equate to the numbers 30, 31, 32, 33, 34, and 35.

For example, there are 44 equations that equal 20, e.g.,

?- findExpr(20,E).

E = [1, *, [4, *, [2, +, 3]]] ;

E = [1, *, [4, *, [3, +, 2]]] ;

E = [1, *, [[2, +, 3], *, 4]] ;

E = [1, *, [[3, +, 2], *, 4]] ;

E = [4, *, [2, +, 3]] ;

E = [4, *, [2, +, [1, *, 3]]] ;

E = [4, *, [2, +, [3, *, 1]]] ;

E = [4, *, [3, +, 2]] ;

...

• Hint: Use the following as a starting place.

findExpr(N,E):-

generateExpr(...),

computeValue(...).

##### Purchase this Solution

##### Solution Summary

Simple Prolog is assessed. A different predicted for nonterminal in the grammar are created.

##### Solution Preview

I hope this will be enough for you to get a good mark, if not 100%.

PROLOG

Due 7/10

NOTE: For your homework, you are not allowed to use the builtin predicate

definitions. If, for example, you want to use member/2, create you own

version called mymember/2 (or something). Same for append, reverse,

sort, and many others.You may use any builtin numeric operators, 'is', the '[' ']'

brackets for lists, fail, not, and maybe some others

• (5) In Prolog, implement the predicate cube/2. This predicate will relate a list of numbers to a list of numbers that, for each number in the first list, contains the number, the square of the number, and the cube of the number. The only modes for this predicate are: cube(+,-), and cube(+,+). E.g.,

?- cube([2,1,4],A).

A = [2,4,8,1,1,1,4,16,64]

?- cube([],[]).

yes.

?- cube([5],[5,25,125]).

yes.

?- cube([2,3],[2,3,4]).

no.

Hi, I'm not going to cheat you at this point. I'm not an expert of PROLOG. Although I've learned the class and got a good marks, I don't think I can 100% solve your problem. Also, I cannot compile and run PORLOG now.

I reply this posting only because I found that there is nobody reply it for one full day and the deadline is near. The program maynot work on the computer but I believe that the principle is Correct.

For this question the idea is ...

##### Purchase this Solution

##### Free BrainMass Quizzes

##### Know Your Linear Equations

Each question is a choice-summary multiple choice question that will present you with a linear equation and then make 4 statements about that equation. You must determine which of the 4 statements are true (if any) in regards to the equation.

##### Solving quadratic inequalities

This quiz test you on how well you are familiar with solving quadratic inequalities.

##### Exponential Expressions

In this quiz, you will have a chance to practice basic terminology of exponential expressions and how to evaluate them.

##### Geometry - Real Life Application Problems

Understanding of how geometry applies to in real-world contexts

##### Multiplying Complex Numbers

This is a short quiz to check your understanding of multiplication of complex numbers in rectangular form.