aboutsummaryrefslogtreecommitdiffstats
path: root/alv-lib
diff options
context:
space:
mode:
Diffstat (limited to 'alv-lib')
-rw-r--r--alv-lib/logic.moon48
1 files changed, 48 insertions, 0 deletions
diff --git a/alv-lib/logic.moon b/alv-lib/logic.moon
index d66f53a..b29c4ba 100644
--- a/alv-lib/logic.moon
+++ b/alv-lib/logic.moon
@@ -26,6 +26,18 @@ class ReduceOp extends PureOp
@out\set accum
+class CompareOp extends PureOp
+ pattern: any.num\rep 2, nil
+ type: T.bool
+
+ tick: =>
+ args = @unwrap_all!
+ accum = true
+ for i = 1, #args - 1
+ accum = accum and @.fn args[i], args[i+1]
+
+ @out\set accum
+
eq = Constant.meta
meta:
name: 'eq'
@@ -121,6 +133,38 @@ bool = Constant.meta
type: T.bool
tick: => @out\set tobool @inputs[1]!
+asc = Constant.meta
+ meta:
+ name: 'asc?'
+ summary: "Check if values are in ascending order."
+ examples: { '(asc? a b [c…])', '(< a b [c…])' }
+ value: class extends CompareOp
+ fn: (a, b) -> a < b
+
+lte = Constant.meta
+ meta:
+ name: '<='
+ summary: "Check if values are in ascending order."
+ examples: { '(<= a b [c…])' }
+ value: class extends CompareOp
+ fn: (a, b) -> a <= b
+
+desc = Constant.meta
+ meta:
+ name: 'desc?'
+ summary: "Check if values are in descending order."
+ examples: { '(desc? a b [c…])', '(> a b [c…])' }
+ value: class extends CompareOp
+ fn: (a, b) -> a > b
+
+gte = Constant.meta
+ meta:
+ name: '>='
+ summary: "Check if values are in descending order."
+ examples: { '(>= a b [c…])' }
+ value: class extends CompareOp
+ fn: (a, b) -> a >= b
+
Constant.meta
meta:
name: 'logic'
@@ -132,4 +176,8 @@ Constant.meta
and: and_
or: or_
not: not_
+
+ 'asc?': asc, '<': asc, '<=': lte
+ 'desc?': desc, '>': desc, '>=': gte
+
:bool