CIS 400 Assignment 2 Fall 1996 In this assignment you are to write a series of Lisp functions which will allow you to play a simplified version of the game Craps. You will also be required to implement these functions in a some imperative language like Pascal or C/C++. You may work with a friend if you wish. For the first part of the assignment, write Lisp implementations for the functions described below: 1. A function THROW-DIE which has a NIL argument list and returns a random number from 1 to 6, inclusive. Hint: The Common Lisp function call (RANDOM 6) returns values ranging from 0 to 5. 2. A function THROW-DICE which has a NIL argument list and returns a list having the value of the first die thrown followed by the value of the second die thrown. For example, (THROW-DICE) might return the throw (3 5). 3. Throwing two ones is called "snake eyes" and two sixes is called "box cars". Write predicate functions SNAKE-EYES-P and BOXCARS-P which take a throw as input and return T or NIL. For example,(BOXCARS-P '(2 3)) returns NIL and(SNAKE-EYES-P '(1 1)) returns T. 4. A throw having a total value of 7 or 11 is an instant winner. A throw having a value of 2, 3, or 12 is an instant loss (American casino rules). Write predicates INSTANT-WIN-P and INSTANT-LOSS-P taking a throw as input to detect these conditions. For example, (INSTANT-LOSS-P '(2 5)) returns NIL and (INSTANT-WIN-P '(2 5)) returns T. 5. Write a function SAY-THROW that takes a throw as input and returns either the sum of the two dice, the symbol BOXCARS, or the symbol SNAKE-EYES (as appropriate). For example, (SAY-THROW '(3 4)) returns 7 and (SAY-THROW '(1 1)) returns SNAKE-EYES. 6. Write a function CRAPS which can be called repeatedly by the user to simulate the game of craps. Don't worry about recording the previous "point" (unless you already are a craps expert and know what to do with it). Model your output after the examples shown below: >(CRAPS) (THROW 1 AND 1 -- SNAKE-EYES -- YOU LOSE) >(CRAPS) (THROW 3 AND 4 -- 7 -- YOU WIN) >(CRAPS) (THROW 2 AND 4 -- YOUR POINT IS 6) 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 and muLisp live 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). The due date for this assignment will be negotiated in class.