(defparameter *rand-max* 100) (defparameter *guess* (random *rand-max*)) (defparameter *no-guesses* 0) (defparameter *finished* 0) (defun reset-guess() (setf *guess* (random *rand-max*))) (defun high-low(value) (when (< value *guess*) (format t "Too low, ~a guesses so far ~%" (incf *no-guesses*))) (when (> value *guess*) (format t "Too High, ~a guesses so far ~%" (incf *no-guesses*))) (when (= value *guess*) (format t "Well done, you took ~a guesses ~%" *no-guesses* (setf *no-guesses* 0) (reset-guess) (setf *finished* 1)))) (defun prompt-read (prompt) (format *query-io* "~&~a:" prompt) (force-output *query-io*) (read-line *query-io*)) (defun read-guess() (or (parse-integer (prompt-read "Guess") :junk-allowed t) 0)) (defun play-game () (loop (high-low (read-guess)) (when (= *finished* 1) (setf *finished* 0) (if (not (y-or-n-p "Another game? [y/n]: ")) (return))))) (play-game)