98 lines
1.4 KiB
HCL
98 lines
1.4 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)
|
|
|
|
|
|
(defclass T
|
|
| j |
|
|
|
|
(defun ::* new()
|
|
(set j 99)
|
|
(return self)
|
|
)
|
|
|
|
(defun x()
|
|
(set R
|
|
(do
|
|
| x |
|
|
(set x 1)
|
|
(while (< x j)
|
|
(defun Q() x)
|
|
(set x (+ x 1))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(set t (:T new))
|
|
(:t x)
|
|
(set t (Q))
|
|
(if (/= t 99) (print "ERROR: t is not 99\n")
|
|
else (printf "OK: %d\n" t))
|
|
|
|
(if (nqv? R false) (print "ERROR: R is not false\n")
|
|
else (printf "OK: %O\n" R))
|