CSCI 162 Spring 2017: Assignment 2
Operating Systems; Programming Languages: Prolog
Due Thursday April 5 at 4:30 pm
Questions:
Students
may discuss Assignment Questions, and may be informed
by such discussions, but when a student writes the submitted work
the student must do so without the aid of any relic of any
conversation, communication, or outside source that gives directly
the solution or partial solution to the problem, unless explicitly permitted by
the Assignment document.
-
Consider the following MARIE program.
clear
Store answer
input
store num
input
store maxj
loop, Load answer
Add num
Store answer
Load num
Add one
Store num
Load j
Add one
Store j
Subt maxj
Skipcond 800
Jump loop
Load answer
Output
Halt
num, dec 0
j, dec 0
maxj, dec 0
one, dec 1
answer, dec 0
a) (1 mark) Give the answer that is output when the inputs are: 1, 3
b) (1 mark) Give the answer that is output when the inputs are: 0, 11
c) (5 mark) Give a short program in C++ that is equivalent to the
program given. By equivalent, we mean that
it computes the same thing and it uses the same method or algorithm.
When writing it in C++,
express the algorithm naturally in C++, using the C++ constructs.
-
Write the following Prolog predicates. Test them
on the Prolog interpreter, and hand in typed or handwritten Prolog predicates.
a) (1 mark) Give the predicate "append(L1,L2,L3)", where L3 is the result
of appending list L2 to the back of list L1.
You don't have to reinvent it; you can look it up in the Prolog Wikibook (link on the web page), or
get it from your notes. The object of this 1 mark question is
to ensure your familiarity with Prolog recursive predicates.
b) (4 marks) Give a prolog predicate that takes a list and counts the number
of elements in the list. The predicate will be size(L,X), where
L is a list and X is the number of members of the list.
c) (6 marks) Give a prolog predicate that takes a list and halves it into
two sublists, the front end and the back end. The predicate will be
halves(L, LF, LB). If the list is of odd length, the front half will
be the longer half. Use the predicate append, which we looked at in
class and is covered in the Prolog Wiki, and use the size predicate.