66 lines
1.0 KiB
HCL
66 lines
1.0 KiB
HCL
|
(defun x (a b ::: r)
|
||
|
|
||
|
| x y |
|
||
|
|
||
|
(set x a)
|
||
|
(set y b)
|
||
|
|
||
|
(if (> a b)
|
||
|
(do
|
||
|
| a b |
|
||
|
(set a (mod x y))
|
||
|
(set b (+ x y))
|
||
|
(set r (* a b))
|
||
|
)
|
||
|
else
|
||
|
(do
|
||
|
|
||
|
| a b |
|
||
|
(set a (* x y))
|
||
|
(set b (- x y))
|
||
|
(set r (* a b))
|
||
|
)
|
||
|
)
|
||
|
|
||
|
(if (/= x a) (printf "ERROR: x is not equal to a\n"))
|
||
|
(if (/= y b) (printf "ERROR: y is not equal to b\n"))
|
||
|
)
|
||
|
|
||
|
(set t (x 10 20))
|
||
|
(if (/= t -2000) (printf "ERROR: t is not equal to -2000\n")
|
||
|
else (printf "OK: %d\n" t))
|
||
|
(set t (x 30 20))
|
||
|
(if (/= t 500) (printf "ERROR: t is not equal to 500\n")
|
||
|
else (printf "OK: %d\n" t))
|
||
|
|
||
|
|
||
|
(defun x ()
|
||
|
|
||
|
(do
|
||
|
| x y |
|
||
|
|
||
|
(set x 99)
|
||
|
(try
|
||
|
|
||
|
(do
|
||
|
| x |
|
||
|
(set x 88)
|
||
|
(if (/= x 88) (printf "ERROR: x is not 88\n")
|
||
|
else (printf "OK: %d\n" x))
|
||
|
(throw 1000)
|
||
|
)
|
||
|
catch (x)
|
||
|
(if (/= x 1000) (printf "ERROR: x is not 1000\n")
|
||
|
else (printf "OK: %d\n" x))
|
||
|
(set y x)
|
||
|
)
|
||
|
|
||
|
(if (/= x 99) (printf "ERROR: x is not 99\n")
|
||
|
else (printf "OK: %d\n" x))
|
||
|
(if (/= y 1000) (print "ERROR: y is not 1000\n")
|
||
|
else (printf "OK: %d\n" y))
|
||
|
)
|
||
|
)
|
||
|
|
||
|
(x)
|