2017-06-26 12:15:03 +03:00
|
|
|
(defmodule Int
|
2017-10-17 10:42:57 +03:00
|
|
|
(register + (λ [Int Int] Int))
|
|
|
|
(register - (λ [Int Int] Int))
|
|
|
|
(register * (λ [Int Int] Int))
|
|
|
|
(register / (λ [Int Int] Int))
|
|
|
|
(register < (λ [Int Int] Bool))
|
|
|
|
(register > (λ [Int Int] Bool))
|
|
|
|
(register = (λ [Int Int] Bool))
|
2017-10-20 18:00:47 +03:00
|
|
|
(register /= (λ [Int Int] Bool))
|
2017-10-17 10:42:57 +03:00
|
|
|
(register mod (λ [Int Int] Int))
|
|
|
|
(register seed (λ [Int] ()))
|
|
|
|
(register random (λ [] Int))
|
|
|
|
(register random-between (λ [Int Int] Int))
|
|
|
|
(register str (λ [Int] String))
|
2017-10-17 17:05:42 +03:00
|
|
|
(register from-string (λ [&String] Int))
|
2017-11-29 15:10:35 +03:00
|
|
|
(register bit-shift-left (λ [Int Int] Int))
|
|
|
|
(register bit-shift-right (λ [Int Int] Int))
|
|
|
|
(register bit-and (λ [Int Int] Int))
|
|
|
|
(register bit-or (λ [Int Int] Int))
|
|
|
|
(register bit-xor (λ [Int Int] Int))
|
|
|
|
(register bit-not (λ [Int] Int))
|
2017-10-17 10:42:57 +03:00
|
|
|
(register inc (λ [Int] Int))
|
|
|
|
(register dec (λ [Int] Int))
|
2017-10-17 17:05:42 +03:00
|
|
|
(register copy (λ [&Int] Int)) ;; TODO: Should not be needed when refs to value types are auto-converted to non-refs.
|
2017-12-30 22:16:31 +03:00
|
|
|
(register format (Fn [&String Int] String))
|
2017-11-16 23:19:39 +03:00
|
|
|
|
|
|
|
(register safe-add (λ [Int Int (Ref Int)] Bool))
|
|
|
|
(register safe-sub (λ [Int Int (Ref Int)] Bool))
|
|
|
|
(register safe-mul (λ [Int Int (Ref Int)] Bool))
|
2017-11-17 14:26:01 +03:00
|
|
|
|
|
|
|
(register abs (λ [Int] Int))
|
|
|
|
|
|
|
|
(defn max [a b] (if (> a b) a b))
|
|
|
|
(defn min [a b] (if (< a b) a b))
|
2017-06-26 12:15:03 +03:00
|
|
|
|
2017-11-29 17:28:21 +03:00
|
|
|
(defn even? [a] (= (mod a 2) 0))
|
|
|
|
(defn odd? [a] (not (even? a)))
|
2017-12-04 09:21:35 +03:00
|
|
|
|
|
|
|
(defn zero []
|
|
|
|
0)
|
|
|
|
|
|
|
|
(defn add-ref [x y]
|
|
|
|
(+ @x @y))
|
2018-01-23 16:34:06 +03:00
|
|
|
|
|
|
|
(defn clamp [min, max, val]
|
|
|
|
(if (> val max)
|
|
|
|
max
|
|
|
|
(if (< val min)
|
|
|
|
min
|
|
|
|
val)))
|
|
|
|
|
|
|
|
(defn pow [x y]
|
|
|
|
(let-do [r 1]
|
|
|
|
(while (/= y 0)
|
|
|
|
(do
|
|
|
|
(when (/= (bit-and y 1) 0)
|
|
|
|
(set! &r (* r x)))
|
|
|
|
(set! &y (/ y 2))
|
|
|
|
(set! &x (* x x))))
|
|
|
|
r))
|
2018-01-15 18:27:05 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
(defmodule IntRef
|
|
|
|
(defn = [a b]
|
|
|
|
(Int.= @a @b))
|
|
|
|
|
|
|
|
(defn < [a b]
|
|
|
|
(Int.< @a @b))
|
2017-12-04 09:21:35 +03:00
|
|
|
|
2018-01-15 18:27:05 +03:00
|
|
|
(defn > [a b]
|
|
|
|
(Int.> @a @b))
|
2017-11-29 17:28:21 +03:00
|
|
|
)
|