(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) (if (< value *guess*) (format t "~a, ~a guesses so far ~%" "Too low" (incf *no-guesses*)) (if (> value *guess*) (format t "~a, ~a guesses so far ~%" "Too high" (incf *no-guesses*)) (if (= value *guess*) (format t "~a, you took ~a guesses ~%" "Well done" *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)