11/7/21, 7:33 PM Homework 3
https://canvas.vt.edu/courses/135925/assignments/1324732 1/3
Homework 3
11/10/2021
50 Possible Points
IN PROGRESS
Next Up: Submit Assignment
Unlimited Attempts Allowed
Attempt 1
Add Comment
Details
1. (5 points) Write a Prolog predicate makeset(L1, L2) that takes list L1 of integers and
removes the repeating elements. The result is returned in list L2. For example,
makeset([1,3,4,1,3,9],Set). would return [1,3,4,9]
2. (5 points) Recall the triple predicate presented in class:
triple(X, XXX) :- append(X, X, XX),
append(XX, X, XXX).
If X=[1,2,3], this will produce [1, 2, 3, 1, 2, 3, 1, 2, 3] in XXX. Rewrite this predicate so that
for X=[1, 2, 3], XXX is set equal to [1, 1, 1, 2, 2, 2, 3, 3, 3].
3. (10 points) Recall the bubblesort code presented in class:
bubblesort(X,Y) :- append(M, [A,B|N], X),
A > B,
append(M, [B,A|N], S),
bubblesort(S, Y).
bubblesort(L,L).
As demonstrated in class, after finding the right solution, the predicate goes on to find a
lot of spurious solutions. “Fix” this code to only give the right solution. You are welcome
to use cut (!) for this exercise.
4. (30 points) You are given the following PROLOG clauses:
female_author :- author(X),
write(X),
write(‘ is an author’),
nl,
female(X),
write(‘ and female’),
nl.
female_author :- write(‘no such luck!’),
nl.
Submit Assignment
11/7/21, 7:33 PM Homework 3
https://canvas.vt.edu/courses/135925/assignments/1324732 2/3
Choose a submission type
author(X) :- name(X).
author(X) :- write(‘no more found!’),
nl,
fail.
name(sartre).
name(calvino).
name(joyce).
female(murdoch).
female(bembridge).
Strategically place cuts (!) in the code to achieve each of the following desired outputs
(i.e., each item below is a separate and independent part of the exercise). You are
allowed to put only one cut per desired output. There are therefore five parts to this
exercise.
1. sartre is an author no more found! no such luck!
2. sartre is an author calvino is an author joyce is an author no more found!
3. sartre is an author no such luck!
4. sartre is an author
5. sartre is an author calvino is an author joyce is an author no such luck!
Add comments to your code to indicate where the cuts would go. For example,
author(X) :- name(X) /* 3 */. if this is where you want the cut to go for #3 above.
You can copy and paste the code and add comments in the one code for all the
cuts.
Upload More
Canvas Files
Choose a file to upload
File permitted: PLSubmit Assignment
11/7/21, 7:33 PM Homework 3
https://canvas.vt.edu/courses/135925/assignments/1324732 3/3
Submit Assignment