diff options
Diffstat (limited to 'lib/utils.nom')
| -rw-r--r-- | lib/utils.nom | 84 |
1 files changed, 42 insertions, 42 deletions
diff --git a/lib/utils.nom b/lib/utils.nom index 8f9cf1a..02d3732 100644 --- a/lib/utils.nom +++ b/lib/utils.nom @@ -1,83 +1,83 @@ require "lib/metaprogramming.nom" # Error functions -rule (error!; panic!; fail!; abort!) =: +rule [error!, panic!, fail!, abort!] =: nomsu "error" [] -rule (error %msg) =: +rule [error %msg] =: nomsu "error"[%msg] -compile (assert %condition %msg) to code: ".." +compile [assert %condition %msg] to code: ".." |if not (\(%condition as lua)) then | nomsu:error(\(%msg as lua)) |end -parse (assert %condition) as: assert %condition (nil) +parse [assert %condition] as: assert %condition (nil) # String functions -rule (join %strs with glue %glue) =: +rule [join %strs with glue %glue] =: lua block ".." |local str_bits = {} |for i,bit in ipairs(vars.strs) do str_bits[i] = nomsu.utils.repr_if_not_string(bit) end |return table.concat(str_bits, vars.glue) -parse (join %strs) as: join %strs with glue "" +parse [join %strs] as: join %strs with glue "" -compile (capitalize %str; %str capitalized) to: +compile [capitalize %str, %str capitalized] to: "(\(%str as lua)):gsub('%l', string.upper, 1)" -compile (say %str) to: ".." +compile [say %str] to: ".." |nomsu:writeln(\(%str as lua)) # Number ranges -compile (%start to %stop by %step; %start to %stop via %step) to: ".." +compile [%start to %stop by %step, %start to %stop via %step] to: ".." |nomsu.utils.range(\(%start as lua), \(%stop as lua), \(%step as lua)) -parse (%start to %stop) as: %start to %stop by 1 +parse [%start to %stop] as: %start to %stop by 1 # Random functions -compile (random number; random; rand) to: "math.random()" -compile (random int %n; random integer %n; randint %n) to: "math.random(\(%n as lua))" -compile (random from %low to %high; random number from %low to %high; rand %low %high) to: +compile [random number, random, rand] to: "math.random()" +compile [random int %n, random integer %n, randint %n] to: "math.random(\(%n as lua))" +compile [random from %low to %high, random number from %low to %high, rand %low %high] to: "math.random(\(%low as lua), \(%high as lua))" -rule (random choice from %elements; random choice %elements; random %elements) =: +rule [random choice from %elements, random choice %elements, random %elements] =: lua expr "\(%elements)[math.random(#\(%elements))]" # Math functions -compile (abs %; absolute value of %; | % |) to: "math.abs(\(% as lua))" -compile (sqrt %; square root of %) to: "math.sqrt(\(% as lua))" -compile (sin %; sine %) to: "math.sin(\(% as lua))" -compile (cos %; cosine %) to: "math.cos(\(% as lua))" -compile (tan %; tangent %) to: "math.tan(\(% as lua))" -compile (asin %; arc sine %) to: "math.asin(\(% as lua))" -compile (acos %; arc cosine %) to: "math.acos(\(% as lua))" -compile (atan %; arc tangent %) to: "math.atan(\(% as lua))" -compile (atan2 %y %x) to: "math.atan2(\(%y as lua), \(%x as lua))" -compile (sinh %; hyperbolic sine %) to: "math.sinh(\(% as lua))" -compile (cosh %; hyperbolic cosine %) to: "math.cosh(\(% as lua))" -compile (tanh %; hyperbolic tangent %) to: "math.tanh(\(% as lua))" -compile (ceil %; ceiling %) to: "math.ceil(\(% as lua))" -compile (exp %; e^ %) to: "math.exp(\(% as lua))" -compile (log %; ln %; natural log %) to: "math.log(\(% as lua))" -compile (log % base %base) to: "math.log(\(% as lua), \(%base as lua))" -compile (floor %) to: "math.floor(\(% as lua))" -compile (round %; % rounded) to: "math.floor(\(% as lua) + .5)" -rule (%n rounded to the nearest %rounder) =: +compile [abs %, absolute value of %, | % |] to: "math.abs(\(% as lua))" +compile [sqrt %, square root of %] to: "math.sqrt(\(% as lua))" +compile [sin %, sine %] to: "math.sin(\(% as lua))" +compile [cos %, cosine %] to: "math.cos(\(% as lua))" +compile [tan %, tangent %] to: "math.tan(\(% as lua))" +compile [asin %, arc sine %] to: "math.asin(\(% as lua))" +compile [acos %, arc cosine %] to: "math.acos(\(% as lua))" +compile [atan %, arc tangent %] to: "math.atan(\(% as lua))" +compile [atan2 %y %x] to: "math.atan2(\(%y as lua), \(%x as lua))" +compile [sinh %, hyperbolic sine %] to: "math.sinh(\(% as lua))" +compile [cosh %, hyperbolic cosine %] to: "math.cosh(\(% as lua))" +compile [tanh %, hyperbolic tangent %] to: "math.tanh(\(% as lua))" +compile [ceil %, ceiling %] to: "math.ceil(\(% as lua))" +compile [exp %, e^ %] to: "math.exp(\(% as lua))" +compile [log %, ln %, natural log %] to: "math.log(\(% as lua))" +compile [log % base %base] to: "math.log(\(% as lua), \(%base as lua))" +compile [floor %] to: "math.floor(\(% as lua))" +compile [round %, % rounded] to: "math.floor(\(% as lua) + .5)" +rule [%n rounded to the nearest %rounder] =: lua expr "(\(%rounder))*math.floor(\(%n)/\(%rounder) + .5)" # Common utility functions -compile (sum of %items; sum %items) to: "nomsu.utils.sum(\(%items as lua))" -compile (product of %items; product %items) to: "nomsu.utils.product(\(%items as lua))" -compile (all of %items) to: "nomsu.utils.all(\(%items as lua))" -compile (any of %items) to: "nomsu.utils.any(\(%items as lua))" -rule (avg of %items; average of %items) =: +compile [sum of %items, sum %items] to: "nomsu.utils.sum(\(%items as lua))" +compile [product of %items, product %items] to: "nomsu.utils.product(\(%items as lua))" +compile [all of %items] to: "nomsu.utils.all(\(%items as lua))" +compile [any of %items] to: "nomsu.utils.any(\(%items as lua))" +rule [avg of %items, average of %items] =: lua expr "(nomsu.utils.sum(\(%items))/#\(%items))" -compile (min of %items; smallest of %items; lowest of %items) to: +compile [min of %items, smallest of %items, lowest of %items] to: "nomsu.utils.min(\(%items as lua))" -compile (max of %items; biggest of %items; largest of %items; highest of %items) to: +compile [max of %items, biggest of %items, largest of %items, highest of %items] to: "nomsu.utils.max(\(%items as lua))" -compile (min of %items by %value_expr) to: +compile [min of %items by %value_expr] to: ".." |nomsu.utils.min(\(%items as lua), function(item) | local vars = setmetatable({['']=item}, {__index=vars}) | return \(%value_expr as lua) |end) -compile (max of %items by %value_expr) to: +compile [max of %items by %value_expr] to: ".." |nomsu.utils.max(\(%items as lua), function(item) | local vars = setmetatable({['']=item}, {__index=vars}) |
