81 lines
2.0 KiB
Clojure
81 lines
2.0 KiB
Clojure
(ns Integer
|
|
"Elixir Integer module — integer operations.
|
|
|
|
In CljElixir: (Integer/to-string 255 16), (Integer/digits 123), etc.")
|
|
|
|
(defn to-string
|
|
"Converts integer to string, optionally in a given base.
|
|
(Integer/to-string 123) ;=> \"123\"
|
|
(Integer/to-string 255 16) ;=> \"FF\""
|
|
([integer])
|
|
([integer base]))
|
|
|
|
(defn to-charlist
|
|
"Converts integer to charlist.
|
|
(Integer/to-charlist 123) ;=> '123'"
|
|
([integer])
|
|
([integer base]))
|
|
|
|
(defn parse
|
|
"Parses a string into an integer. Returns {integer rest} or :error.
|
|
(Integer/parse \"123abc\") ;=> {123 \"abc\"}
|
|
(Integer/parse \"FF\" 16) ;=> {255 \"\"}
|
|
(Integer/parse \"nope\") ;=> :error"
|
|
([string])
|
|
([string base]))
|
|
|
|
(defn digits
|
|
"Returns the digits of `integer` as a list.
|
|
(Integer/digits 123) ;=> [1 2 3]
|
|
(Integer/digits 255 16) ;=> [15 15]"
|
|
([integer])
|
|
([integer base]))
|
|
|
|
(defn undigits
|
|
"Converts a list of digits back to an integer.
|
|
(Integer/undigits [1 2 3]) ;=> 123
|
|
(Integer/undigits [15 15] 16) ;=> 255"
|
|
([digits])
|
|
([digits base]))
|
|
|
|
(defn pow
|
|
"Returns `base` raised to `exponent` (integer exponentiation).
|
|
(Integer/pow 2 10) ;=> 1024"
|
|
[base exponent])
|
|
|
|
(defn gcd
|
|
"Returns the greatest common divisor.
|
|
(Integer/gcd 12 8) ;=> 4"
|
|
[integer1 integer2])
|
|
|
|
(defn mod
|
|
"Computes modulo (always non-negative for positive divisor).
|
|
(Integer/mod 10 3) ;=> 1
|
|
(Integer/mod -5 3) ;=> 1 (differs from rem)"
|
|
[dividend divisor])
|
|
|
|
(defn floor-div
|
|
"Integer division rounded towards negative infinity.
|
|
(Integer/floor-div 10 3) ;=> 3
|
|
(Integer/floor-div -5 3) ;=> -2"
|
|
[dividend divisor])
|
|
|
|
(defn is-odd
|
|
"Returns true if `integer` is odd. Allowed in guards.
|
|
(Integer/is-odd 3) ;=> true"
|
|
[integer])
|
|
|
|
(defn is-even
|
|
"Returns true if `integer` is even. Allowed in guards.
|
|
(Integer/is-even 4) ;=> true"
|
|
[integer])
|
|
|
|
(defn extended-gcd
|
|
"Returns {gcd, s, t} such that gcd = s*a + t*b (Bezout's identity).
|
|
(Integer/extended-gcd 12 8) ;=> {4 1 -1}"
|
|
[a b])
|
|
|
|
(defn to-string-padded
|
|
"Converts integer to string with zero-padding."
|
|
[integer width])
|