From 5a2dd4a7e8a6857e8cf32b6fe1524f04962c54cb Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Mon, 25 Mar 2024 23:54:19 +0100 Subject: Add support for context-dependent imports / generics --- std/Generic/Number.bruijn | 66 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 std/Generic/Number.bruijn (limited to 'std/Generic/Number.bruijn') diff --git a/std/Generic/Number.bruijn b/std/Generic/Number.bruijn new file mode 100644 index 0000000..e39fc91 --- /dev/null +++ b/std/Generic/Number.bruijn @@ -0,0 +1,66 @@ +# MIT License, Copyright (c) 2024 Marvin Borner +# generic number template, meant to be :input-ted +# assumes: zero?, even?, gt?, zero?, eq?, add, compare-case + +# TODO: also include std/Number more std/Math etc.? Requires solution for recursive imports +# then: give numeral systems unary id, match with index-unary + +:import std/Combinator . +:import std/Logic . + +# returns true if number is not zero +not-zero? not! ∘∘ zero? ⧗ Generic → Boolean + +≠?‣ not-zero? + +# returns true if two numbers are not equal +not-eq? not! ∘∘ eq? ⧗ Generic → Generic → Boolean + +…≠?… not-eq? + +# prefix for comparing functions +?‣ &eq? + +# returns true if number is lts than other number +lt? \gt? ⧗ Generic → Generic → Boolean + +…b, -1 if a… compare + +<=>‣ &compare + +# returns true if comparison result is equal (EQ) +c-eq? eq? (+0) ⧗ Generic → Generic + +# returns true if comparison result is lts than (LT) +c-lt? eq? (-1) ⧗ Generic → Generic + +# returns true if comparison result is gtater than (GT) +c-gt? eq? (+1) ⧗ Generic → Generic + +# returns max number of two +max [[(1 ≤? 0) 0 1]] ⧗ Generic → Generic → Generic + +# returns min number of two +min [[(1 ≤? 0) 1 0]] ⧗ Generic → Generic → Generic + +# clamps a number between two numbers +clamp [[[min 1 (max 0 2)]]] ⧗ Generic → Generic → Generic + +# returns true if the number is odd (remainder mod 2 == 1) +odd? ¬‣ ∘ even? ⧗ Generic → Boolean -- cgit v1.2.3