From dfd4807b8062033dde8b05799481e07cfb53a82d Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Thu, 8 Sep 2022 04:37:49 +0000 Subject: [PATCH] Apply and, apply or. Close 116 --- kiss/src/kiss/Macros.hx | 2 ++ kiss/src/kiss/Prelude.hx | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/kiss/src/kiss/Macros.hx b/kiss/src/kiss/Macros.hx index 3a5ba4b8..17289809 100644 --- a/kiss/src/kiss/Macros.hx +++ b/kiss/src/kiss/Macros.hx @@ -111,6 +111,8 @@ class Macros { "zipDrop" => "Prelude.zipDrop", "concat" => "Prelude.concat", "intersect" => "Prelude.intersect", + "and" => "Prelude.and", + "or" => "Prelude.or" ]; k.doc("apply", 2, 2, '(apply )' ); macros["apply"] = (wholeExp:ReaderExp, exps:Array, k) -> { diff --git a/kiss/src/kiss/Prelude.hx b/kiss/src/kiss/Prelude.hx index a54c6029..caf3ffac 100644 --- a/kiss/src/kiss/Prelude.hx +++ b/kiss/src/kiss/Prelude.hx @@ -57,6 +57,26 @@ class Prelude { }; } + static function _and(values:Array):Dynamic { + for (value in values) { + if (!truthy(value)) { + return false; + } + } + return values[values.length - 1]; + } + public static var and:Function = Reflect.makeVarArgs(_and); + + static function _or(values:Array):Dynamic { + for (value in values) { + if (truthy(value)) { + return value; + } + } + return false; + } + public static var or:Function = Reflect.makeVarArgs(_or); + // Kiss arithmetic will incur overhead because of these switch statements, but the results will not be platform-dependent static function _add(values:Array):Dynamic { var sum:Dynamic = values[0];