| 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: |
;;__________________________________________________
;;;; 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.