diff options
author | Eduardo Julian | 2020-12-04 01:13:01 -0400 |
---|---|---|
committer | Eduardo Julian | 2020-12-04 01:13:01 -0400 |
commit | 8df63aae42c40ac0413ccfacc3b2e8eb72e00a15 (patch) | |
tree | 5e1eb6833398b8a67a2e3d0db4a615204a25f80f /stdlib/source/lux/data/number/int.lux | |
parent | 0205e5146b50ab066d152fccda0fc8cef4eef852 (diff) |
Re-named old luxc-jvm to lux-bootstrapper.
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/lux/data/number/int.lux | 47 |
1 files changed, 26 insertions, 21 deletions
diff --git a/stdlib/source/lux/data/number/int.lux b/stdlib/source/lux/data/number/int.lux index 38a0dc63a..087302b8d 100644 --- a/stdlib/source/lux/data/number/int.lux +++ b/stdlib/source/lux/data/number/int.lux @@ -87,7 +87,9 @@ [(../ param subject) (..% param subject)]) -(def: #export negate (-> Int Int) (..* -1)) +(def: #export (negate value) + (-> Int Int) + (..- value +0)) (def: #export (abs x) (-> Int Int) @@ -102,13 +104,13 @@ ## else +1)) -(def: #export (mod param subject) +(def: #export (mod divisor dividend) (All [m] (-> Int Int Int)) - (let [raw (..% param subject)] - (if (..< +0 raw) - (let [shift (if (..< +0 param) ..- ..+)] - (|> raw (shift param))) - raw))) + (if (..= (..signum divisor) (..signum dividend)) + (..% divisor dividend) + (case (..% divisor dividend) + +0 +0 + rem (..+ divisor rem)))) (def: #export even? (-> Int Bit) @@ -185,23 +187,26 @@ [minimum ..min (\ ..interval top)] ) +(def: -sign "-") +(def: +sign "+") + (def: (sign!! value) (-> Int Text) (if (..< +0 value) - "-" - "+")) + ..-sign + ..+sign)) (def: (sign?? representation) (-> Text (Maybe Int)) - (case ("lux text char" 0 representation) - (^ (char "-")) - (#.Some -1) + (`` (case ("lux text char" 0 representation) + (^ (char (~~ (static ..-sign)))) + (#.Some -1) - (^ (char "+")) - (#.Some +1) + (^ (char (~~ (static ..+sign)))) + (#.Some +1) - _ - #.None)) + _ + #.None))) (def: (int-decode-loop input-size repr sign <base> <to-value> <error>) (-> Nat Text Int Int (-> Char (Maybe Nat)) Text (Try Int)) @@ -217,7 +222,7 @@ (|> output (..* <base>) (..+ (.int digit-value))))) (#try.Success (..* sign output))))) -(template [<struct> <base> <to-character> <to-value> <error>] +(template [<base> <struct> <to-character> <to-value> <error>] [(structure: #export <struct> (Codec Text Int) @@ -245,10 +250,10 @@ (#try.Failure <error>)) (#try.Failure <error>)))))] - [binary +2 //nat.binary-character //nat.binary-value "Invalid binary syntax for Int: "] - [octal +8 //nat.octal-character //nat.octal-value "Invalid octal syntax for Int: "] - [decimal +10 //nat.decimal-character //nat.decimal-value "Invalid syntax for Int: "] - [hex +16 //nat.hexadecimal-character //nat.hexadecimal-value "Invalid hexadecimal syntax for Int: "] + [+02 binary //nat.binary-character //nat.binary-value "Invalid binary syntax for Int: "] + [+08 octal //nat.octal-character //nat.octal-value "Invalid octal syntax for Int: "] + [+10 decimal //nat.decimal-character //nat.decimal-value "Invalid syntax for Int: "] + [+16 hex //nat.hexadecimal-character //nat.hexadecimal-value "Invalid hexadecimal syntax for Int: "] ) (structure: #export hash |