Carp/core/Int.carp

71 lines
1.6 KiB
Plaintext
Raw Normal View History

2018-01-24 18:08:18 +03:00
(system-include "carp_int.h")
2018-01-24 17:53:18 +03:00
2017-06-26 12:15:03 +03:00
(defmodule Int
(register MAX Int "INT_MAX")
2018-06-01 17:40:14 +03:00
(register MIN Int "INT_MIN")
(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))
(register neg (λ [Int] Int))
(register mod (λ [Int Int] 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))
(register inc (λ [Int] Int))
(register dec (λ [Int] Int))
(register copy (λ [&Int] Int))
2017-11-17 14:26:01 +03:00
2018-03-27 10:43:39 +03:00
(doc abs "The absolute value (removes the negative sign) of an Int.")
2017-11-17 14:26:01 +03:00
(register abs (λ [Int] Int))
2017-11-29 17:28:21 +03:00
(defn even? [a] (= (mod a 2) 0))
(defn odd? [a] (not (even? a)))
(defn zero []
0)
(defn add-ref [x y]
(Int.+ @x @y))
2018-06-01 17:40:14 +03:00
;; Move to generic math module?
(defn clamp [min, max, val]
(if (> val max)
max
(if (< val min)
min
val)))
(doc pow "Raise x to the power of y.")
(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))
2018-04-24 11:57:58 +03:00
(defn /= [a b]
(Int./= @a @b))
2018-01-15 18:27:05 +03:00
(defn < [a b]
(Int.< @a @b))
2018-01-15 18:27:05 +03:00
(defn > [a b]
(Int.> @a @b))
2017-11-29 17:28:21 +03:00
)