;; -*- Mode: Irken -*-
(include "lib/core.scm")
(include "lib/random.scm")
(define (level0 x)
(try
(level1 x)
except
(:Level0 x) -> (:pair "level 0" x)
))
(define (level1 x)
(try
(level2 x)
except
(:Level1 x) -> (:pair "level 1" x)
))
(define (level2 x)
(try
(level3 x)
except
(:Level2 x) -> (:pair "level 2" x)
))
(define (level3 x)
(try
(match x with
0 -> (raise (:Level0 x))
1 -> (raise (:Level1 x))
2 -> (raise (:Level2 x))
3 -> (raise (:Level3 x))
4 -> (:pair "no exception!" 99)
_ -> (raise (:Bottom x))
)
except
(:Level3 x) -> (:pair "level 3" x)
))
(printn (level0 0))
(printn (level0 1))
(printn (level0 2))
(printn (level0 3))
(printn (level0 4))
(printn (level0 5))