;;; -*- mode: lisp -*-
;;; $Id: except.cmucl,v 1.2 2001/01/01 17:51:53 doug Exp $
;;; http://www.bagley.org/~doug/shootout/
;;; From: Friedrich Dominicus
(defparameter *hi* 0)
(defparameter *lo* 0)
(defun some-fun (n)
(catch t
(hi-fun n)))
(defun hi-fun (n)
(catch 'Hi_Exception
(lo-fun n)))
(defun lo-fun (n)
(catch 'Lo_Exception
(blow-up n)))
(defun blow-up (n)
(if (evenp n)
(throw 'Hi_Exception (setf *hi* (1+ *hi*)))
(throw 'Lo_Exception (setf *lo* (1+ *lo*)))))
(let ((n (parse-integer (or (car pop11::poparglist) "1"))))
(setf *hi* 0
*lo* 0)
(do ((i 0 (1+ i)))
((= i n))
(some-fun i)))
(format t "Exceptions: HI=~A / LO=~A~%" *hi* *lo*)