CIS 400 Assignment 2
Fall 1999
In this assignment you are to write a series of Lisp
functions which will allow you to play a simplified version of the
game Paper-Scissors-Rock. You will also be required to implement
several algorithms using the functional style in a procedural
language like Pascal or C++.
For the first part of the assignment, write Lisp
implementations for the functions described below:
1. A function COMPUTER-MOVE which has a NIL argument list and
returns a random number from 1 to 3, inclusive. (Hint: The
Common Lisp function call (RANDOM 3) returns values ranging
from 0 to 2.)
2. A function CONVERT that takes a number (1 to 3) as an
argument and returns as its value PAPER, SCISSORS, or ROCK.
3. A function GET-MOVE which has a NIL argument list and
prompts the user to type P, S, or R and returns PAPER,
SCISSORS, or ROCK as its value. (Hint: Write a helper
function similar to CONVERT. Prompts may be displayed using
PRINT or PRINC and replies read using READ). It would be best
if bad input values were discarded and the user were
prompted for replacement values.
4. A function TWO-MOVES which has a NIL argument list and
returns a list having the value of the computers move
followed by the value of the user move. For example,
(TWO-MOVES) might return the throw (PAPER ROCK).
5. Predicate functions COMPUTER-WIN-P and TIE-P which each have
a single list argument like the one produced by TWO-MOVES.
COMPUTER-WIN-P and returns T if the computer move beats the
user move and NIL otherwise. For example, (COMPUTER-WIN-P
'(PAPER ROCK)) returns T. TIE-P returns T any time the two
move match. Of course, like always PAPER covers ROCK, ROCK
smashes SCISSORS, and SCISSORS cut PAPER.
6. A function DESCRIBE-VICTORY which takes a single list
argument similar to that produced by TWO-MOVES and returns a
one of the appropriate lists: (PAPER COVERS ROCK), (ROCK
SMASHES SCISSORS), (SCISSORS CUT PAPER). For example,
(DESCRIBE-VICTORY '(PAPER ROCK)) returns (PAPER COVERS
ROCK).
7. A function PSR which can be called repeatedly by the user to
simulate the game. Model your output after the examples
shown below:
>(PSR)
(ENTER MOVE: P S R)R
(I WON PAPER COVERS ROCK)
>(PSR)
(ENTER MOVE: P S R)S
(YOU WON SCISSORS CUT PAPER)
>(PSR)
(ENTER MOVE: P S R)P
(TIE -- WE MATCHED)
For the second part of your assignment, you are to implement
these functions from the first part in some imperative language.
You are to write this program in a functional style, without
excessive reliance on the assignment operation. This means that
you may use any control structures from the language you wish, but
you must write functions not procedures.
You may use any Lisp dialect you have access to (XLisp can be
downloaded from the Internet and muLisp lives in the CW micro
lab). You should include enough trials of each function (Lisp or
otherwise) to demonstrate that they perform as specified. Be sure
that I end up with a complete listing of your carefully commented
source code (both Lisp and whatever) as well as your output. Also
be certain that it will be easy for me to match the function calls
with their output (some hand written notes or comments might be
helpful). I am not requiring a memo this time. The first part of
your assignment will be 20 points, the second will be worth 15
(compiler listing, language use, comments).
Assigned: 10-13-99
Due date: 11-01-99