Paste number 96733: Number Guessing Game

Paste number 96733: Number Guessing Game
Pasted by: Snamich
When:1 year, 10 months ago
Share:Tweet this! | http://paste.lisp.org/+22N1
Channel:None
Paste contents:
Raw Source | XML | Display As
;;__________________________________________________
;;;; Guess the number REPL game

; uses closures to capture the state of the game and accessor functions to check and reset state

(defun guess-number-game ()
  (reset-number)
  (reset-status)
  (loop
     until (check-status)
     for input = (prompt-for-number)
     do (check-guess input))
  (if (y-or-n-p "Play again?")
      (guess-number-game)
      (format t "See you next time!~%")))

(let ((number nil)
      (guesses 0)
      (won? nil))
  (defun reset-number ()
    (setf number (+ (random 100) 1)
	  guesses 0)
    'ready)
  (defun reset-status ()
    (setf won? nil)
    'ready)
  (defun check-guess (x)
    (incf guesses)
    (cond ((= x number) 
	   (setf won? t)
	   (format t "It took you ~a guesses.~%" guesses))
	  ((< x number) (format t "Too low.~%"))
	  ((> x number) (format t "Too high.~%"))))
  (defun check-status ()
    won?))

(defun prompt-for-number ()
  (format t "Please enter a number: ")
  (let ((input (read)))
    (if (numberp input)
	input
	(prompt-for-number))))

This paste has no annotations.

Colorize as:
Show Line Numbers

Lisppaste pastes can be made by anyone at any time. Imagine a fearsomely comprehensive disclaimer of liability. Now fear, comprehensively.