From 00cbfeb201c0accd1418237b0f8c3c5f943ef02e Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Thu, 10 Dec 2020 22:07:35 -0500 Subject: =?UTF-8?q?Add=20specification=20for=20basic=20arithmetic=20+-?= =?UTF-8?q?=C3=97=C3=B7=E2=8B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/README.md | 2 +- spec/primitive.md | 25 +++++++++++++++++++++++++ spec/reference.bqn | 3 +-- 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 spec/primitive.md (limited to 'spec') diff --git a/spec/README.md b/spec/README.md index f7c1d50b..1951d7ff 100644 --- a/spec/README.md +++ b/spec/README.md @@ -11,6 +11,6 @@ The following aspects define BQN and are or will be specified: - [Grammar](grammar.md) - [Variable scoping](scope.md) - [Evaluation semantics](evaluate.md) -- Primitives ([reference implementations](reference.bqn)) +- [Primitives](primitive.md) ([reference implementations](reference.bqn)) - [Inferred properties](inferred.md) (type, Undo, and Under) - [System-provided values](system.md) (`โ€ข`) diff --git a/spec/primitive.md b/spec/primitive.md new file mode 100644 index 00000000..d9542ef4 --- /dev/null +++ b/spec/primitive.md @@ -0,0 +1,25 @@ +*View this file with results and syntax highlighting [here](https://mlochbaum.github.io/BQN/spec/primitive.html).* + +# Specification: BQN primitives + +Most primitives are specified by the BQN-based implementation in [reference.bqn](reference.bqn). This document specifies the basic functionality required by those definitions. Descriptions of other primitives are for informational purposes only. + +## Arithmetic + +Functions here are defined for atoms only; the reference implementations extend them to arrays. + +BQN uses five arithmetic functions that are standard in mathematics. The precision of these operations should be specified by the number [type](types.md). + +- Add `+` +- Negate `-` and Subtract `-` invert addition, with `-๐•ฉ` equivalent to `0-๐•ฉ` and `๐•จ-๐•ฉ` equivalent to `๐•จ+-๐•ฉ` +- Multiply `ร—` generalizes repeated addition. +- Divide `รท` inverts multiplication, with `รท๐•ฉ` equivalent to `1รท๐•ฉ` and `๐•จรท๐•ฉ` equivalent to `๐•จร—รท๐•ฉ` +- Power `โ‹†` generalizes repeated multiplication, and Exponential `โ‹†` is Power with Euler's number *e* as the base. + +The three higher functions `ร—`, `รท`, and `โ‹†` apply to numbers and no other atomic types. `+` and `-` apply to numbers, and possibly also to characters, according to the rules of the affine character type: + +- If one argument to `+` is the character with code point `c` and the other is a number `n` (in either order), then the result is the character with code point `c+n`. +- If the left argument to `-` is the character with code point `c` and the right is a number `n`, the result is the character with code point `c-n`. +- If both arguments to `-` are characters, the result is the difference of their respective code points. + +In the first two cases, if the result would not be a valid Unicode code point, then an error results. The remaining cases of `+` and `-` (adding two characters; negating a character or subtracting it from a number) are not allowed. diff --git a/spec/reference.bqn b/spec/reference.bqn index d88cae63..b7a8f1cd 100644 --- a/spec/reference.bqn +++ b/spec/reference.bqn @@ -2,8 +2,7 @@ # limited initial functionality. Implementations are designed to be # simple and not fast. -# Not yet included: characters, complex numbers, comparison tolerance, -# selective assignment, and Under. +# Not yet included: complex numbers or comparison tolerance. # In some cases an operation is defined with limited functionality at # first and later expanded. For convenience, rather than renaming these -- cgit v1.2.3