Arithmetic / Logic: Difference between revisions
(Created page with "= Arithmetic / Logic = The '''Arithmetic / Logic''' module provides essential mathematical operations and logical comparisons for the SCM programming language. This module includes: * '''Type checking''': Functions to verify data types (int?, number?, nil?) * '''Basic arithmetic''': Addition (+), subtraction (-), multiplication (*), and division (/) * '''Comparison operations''': All standard comparison operators (>, <, >=, <=, equal?) * '''Logical operations''': Boole...") |
No edit summary |
||
| Line 1: | Line 1: | ||
<span id="arithmetic--logic"></span> | |||
= Arithmetic / Logic = | = Arithmetic / Logic = | ||
<span id="int"></span> | |||
== int? == | |||
tells if the value is a integer | |||
'''Allowed number of parameters:''' 1–1 | |||
<span id="parameters"></span> | |||
=== Parameters === | |||
* ''' | * '''value''' (<code>any</code>): value | ||
<span id="returns"></span> | |||
=== Returns === | |||
<code>bool</code> | |||
== | <span id="number"></span> | ||
== number? == | |||
tells if the value is a | tells if the value is a number | ||
'''Allowed number of parameters:''' 1–1 | '''Allowed number of parameters:''' 1–1 | ||
<span id="parameters-1"></span> | |||
=== Parameters === | |||
* '''value''' (<code>any</code>): value | * '''value''' (<code>any</code>): value | ||
<span id="returns-1"></span> | |||
=== Returns === | |||
== | <code>bool</code> | ||
<span id="symbol"></span> | |||
== symbol? == | |||
tells if the value is a | tells if the value is a symbol | ||
'''Allowed number of parameters:''' 1–1 | '''Allowed number of parameters:''' 1–1 | ||
<span id="parameters-2"></span> | |||
=== Parameters === | |||
* '''value''' (<code>any</code>): value | * '''value''' (<code>any</code>): value | ||
<span id="returns-2"></span> | |||
=== Returns === | |||
<code>bool</code> | |||
== + == | == + == | ||
| Line 39: | Line 57: | ||
adds two or more numbers | adds two or more numbers | ||
'''Allowed number of parameters:''' | '''Allowed number of parameters:''' 0–10000 | ||
<span id="parameters-3"></span> | |||
=== Parameters === | |||
* '''value...''' (<code>number</code>): values to add ''(variadic)'' | |||
* '''value...''' (<code>number</code>): values to add | |||
''' | <span id="returns-3"></span> | ||
=== Returns === | |||
<code>number</code> | |||
== sql_sum_reduce == | |||
adds two SQL SUM values while treating NULL as the empty aggregate identity | |||
'''Allowed number of parameters:''' 2–2 | |||
<span id="parameters-4"></span> | |||
=== Parameters === | |||
* '''left''' (<code>number|nil</code>): partial sum | |||
* '''right''' (<code>number|nil</code>): next value | |||
<span id="returns-4"></span> | |||
=== Returns === | |||
<code>number|nil</code> | |||
== - == | == - == | ||
| Line 50: | Line 90: | ||
subtracts two or more numbers from the first one | subtracts two or more numbers from the first one | ||
'''Allowed number of parameters:''' | '''Allowed number of parameters:''' 0–10000 | ||
<span id="parameters-5"></span> | |||
=== Parameters === | |||
* '''value...''' (<code>number</code>): values ''(variadic)'' | |||
<span id="returns-5"></span> | |||
=== Returns === | |||
<code>number</code> | |||
== sql_add_numeric_literals == | |||
adds two SQL numeric literals using their exact decimal spellings | |||
'''Allowed number of parameters:''' 2–2 | |||
<span id="parameters-6"></span> | |||
=== Parameters === | |||
* '''a''' (<code>number</code>): left literal | |||
* '''b''' (<code>number</code>): right literal | |||
<span id="returns-6"></span> | |||
=== Returns === | |||
<code>number</code> | |||
== sql_sub_numeric_literals == | |||
subtracts two SQL numeric literals using their exact decimal spellings | |||
'''Allowed number of parameters:''' 2–2 | |||
<span id="parameters-7"></span> | |||
=== Parameters === | |||
''' | * '''a''' (<code>number</code>): left literal | ||
* ''' | * '''b''' (<code>number</code>): right literal | ||
<span id="returns-7"></span> | |||
=== Returns === | |||
<code>number</code> | |||
<span id="-1"></span> | |||
== * == | == * == | ||
multiplies two or more numbers | multiplies two or more numbers | ||
'''Allowed number of parameters:''' | '''Allowed number of parameters:''' 0–10000 | ||
<span id="parameters-8"></span> | |||
=== Parameters === | |||
''' | * '''value...''' (<code>number</code>): values ''(variadic)'' | ||
<span id="returns-8"></span> | |||
=== Returns === | |||
<code>number</code> | |||
<span id="-2"></span> | |||
== / == | == / == | ||
divides two or more numbers from the first one | divides two or more numbers from the first one | ||
'''Allowed number of parameters:''' | '''Allowed number of parameters:''' 0–10000 | ||
<span id="parameters-9"></span> | |||
=== Parameters === | |||
''' | * '''value...''' (<code>number</code>): values ''(variadic)'' | ||
== | <span id="returns-9"></span> | ||
=== Returns === | |||
<code>number</code> | |||
== mod == | |||
returns the remainder of integer division (modulo) | |||
'''Allowed number of parameters:''' 2–2 | '''Allowed number of parameters:''' 2–2 | ||
<span id="parameters-10"></span> | |||
=== Parameters === | |||
''' | * '''a''' (<code>number</code>): dividend | ||
* '''b''' (<code>number</code>): divisor | |||
== | <span id="returns-10"></span> | ||
=== Returns === | |||
compares two numbers or strings | <code>number</code> | ||
<span id="-3"></span> | |||
== <= == | |||
compares two numbers or strings; returns nil if either value is nil | |||
'''Allowed number of parameters:''' 2–2 | '''Allowed number of parameters:''' 2–2 | ||
<span id="parameters-11"></span> | |||
=== Parameters === | |||
''' | * '''a''' (<code>any</code>): first value | ||
* '''b''' (<code>any</code>): second value | |||
== | <span id="returns-11"></span> | ||
=== Returns === | |||
compares two numbers or strings | <code>bool</code> | ||
<span id="-4"></span> | |||
== < == | |||
compares two numbers or strings; returns nil if either value is nil | |||
'''Allowed number of parameters:''' 2–2 | '''Allowed number of parameters:''' 2–2 | ||
''' | <span id="parameters-12"></span> | ||
* ''' | === Parameters === | ||
* '''a''' (<code>any</code>): first value | |||
* '''b''' (<code>any</code>): second value | |||
<span id="returns-12"></span> | |||
=== Returns === | |||
<code>bool</code> | |||
== | <span id="-5"></span> | ||
== > == | |||
compares two numbers or strings | compares two numbers or strings; returns nil if either value is nil | ||
'''Allowed number of parameters:''' 2–2 | '''Allowed number of parameters:''' 2–2 | ||
<span id="parameters-13"></span> | |||
=== Parameters === | |||
''' | * '''a''' (<code>any</code>): first value | ||
* '''b''' (<code>any</code>): second value | |||
<span id="returns-13"></span> | |||
=== Returns === | |||
<code>bool</code> | |||
<span id="-6"></span> | |||
== >= == | |||
compares two numbers or strings; returns nil if either value is nil | |||
'''Allowed number of parameters:''' 2–2 | |||
<span id="parameters-14"></span> | |||
=== Parameters === | |||
* '''a''' (<code>any</code>): first value | |||
* '''b''' (<code>any</code>): second value | |||
<span id="returns-14"></span> | |||
=== Returns === | |||
<code>bool</code> | |||
<span id="equal"></span> | |||
== equal? == | == equal? == | ||
| Line 129: | Line 266: | ||
'''Allowed number of parameters:''' 2–2 | '''Allowed number of parameters:''' 2–2 | ||
''' | <span id="parameters-15"></span> | ||
* ''' | === Parameters === | ||
* '''a''' (<code>any</code>): first value | |||
* '''b''' (<code>any</code>): second value | |||
<span id="returns-15"></span> | |||
=== Returns === | |||
<code>bool</code> | |||
<span id="equal-1"></span> | |||
== equal?? == | == equal?? == | ||
| Line 140: | Line 284: | ||
'''Allowed number of parameters:''' 2–2 | '''Allowed number of parameters:''' 2–2 | ||
''' | <span id="parameters-16"></span> | ||
* '''value | === Parameters === | ||
* '''a''' (<code>any</code>): first value | |||
* '''b''' (<code>any</code>): second value | |||
<span id="returns-16"></span> | |||
=== Returns === | |||
<code>bool</code> | |||
== sql_not == | |||
negates a SQL predicate while preserving nil as UNKNOWN | |||
'''Allowed number of parameters:''' 1–1 | |||
<span id="parameters-17"></span> | |||
=== Parameters === | |||
* '''value''' (<code>any</code>): SQL predicate value | |||
<span id="returns-17"></span> | |||
=== Returns === | |||
<code>bool|nil</code> | |||
== equal_collate == | |||
performs SQL equality with a specified collation (e.g. *_ci case-insensitive, *_bin case-sensitive); returns nil if either arg is nil | |||
''' | '''Allowed number of parameters:''' 3–3 | ||
<span id="parameters-18"></span> | |||
=== Parameters === | |||
* '''a''' (<code>any</code>): left side | |||
* '''b''' (<code>any</code>): right side | |||
* '''collation''' (<code>string</code>): collation name | |||
<span id="returns-18"></span> | |||
=== Returns === | |||
<code>bool</code> | |||
== notequal_collate == | |||
performs SQL inequality with a specified collation; returns nil if either arg is nil | |||
'''Allowed number of parameters:''' 3–3 | |||
<span id="parameters-19"></span> | |||
=== Parameters === | |||
* '''a''' (<code>any</code>): left side | |||
* '''b''' (<code>any</code>): right side | |||
* '''collation''' (<code>string</code>): collation name | |||
<span id="returns-19"></span> | |||
=== Returns === | |||
<code>bool</code> | |||
<span id="-7"></span> | |||
== ! == | == ! == | ||
| Line 151: | Line 354: | ||
'''Allowed number of parameters:''' 1–1 | '''Allowed number of parameters:''' 1–1 | ||
<span id="parameters-20"></span> | |||
=== Parameters === | |||
* '''value''' (<code>bool</code>): value | * '''value''' (<code>bool</code>): value | ||
<span id="returns-20"></span> | |||
=== Returns === | |||
<code>bool</code> | |||
== not == | == not == | ||
| Line 162: | Line 370: | ||
'''Allowed number of parameters:''' 1–1 | '''Allowed number of parameters:''' 1–1 | ||
<span id="parameters-21"></span> | |||
=== Parameters === | |||
* '''value''' (<code>bool</code>): value | * '''value''' (<code>bool</code>): value | ||
<span id="returns-21"></span> | |||
=== Returns === | |||
<code>bool</code> | |||
<span id="nil"></span> | |||
== nil? == | == nil? == | ||
| Line 173: | Line 387: | ||
'''Allowed number of parameters:''' 1–1 | '''Allowed number of parameters:''' 1–1 | ||
<span id="parameters-22"></span> | |||
=== Parameters === | |||
* '''value''' (<code>any</code>): value | * '''value''' (<code>any</code>): value | ||
<span id="returns-22"></span> | |||
=== Returns === | |||
<code>bool</code> | |||
== min == | == min == | ||
| Line 182: | Line 401: | ||
returns the smallest value | returns the smallest value | ||
'''Allowed number of parameters:''' | '''Allowed number of parameters:''' 0–10000 | ||
<span id="parameters-23"></span> | |||
=== Parameters === | |||
''' | * '''value...''' (<code>number|string</code>): value ''(variadic)'' | ||
<span id="returns-23"></span> | |||
=== Returns === | |||
<code>number|string</code> | |||
== max == | == max == | ||
| Line 193: | Line 417: | ||
returns the highest value | returns the highest value | ||
'''Allowed number of parameters:''' | '''Allowed number of parameters:''' 0–10000 | ||
<span id="parameters-24"></span> | |||
=== Parameters === | |||
* '''value...''' (<code>number|string</code>): value ''(variadic)'' | |||
<span id="returns-24"></span> | |||
=== Returns === | |||
<code>number|string</code> | |||
== floor == | == floor == | ||
| Line 206: | Line 435: | ||
'''Allowed number of parameters:''' 1–1 | '''Allowed number of parameters:''' 1–1 | ||
<span id="parameters-25"></span> | |||
=== Parameters === | |||
* '''value''' (<code>number</code>): value | * '''value''' (<code>number</code>): value | ||
<span id="returns-25"></span> | |||
=== Returns === | |||
<code>number</code> | |||
== ceil == | == ceil == | ||
| Line 217: | Line 451: | ||
'''Allowed number of parameters:''' 1–1 | '''Allowed number of parameters:''' 1–1 | ||
<span id="parameters-26"></span> | |||
=== Parameters === | |||
* '''value''' (<code>number</code>): value | * '''value''' (<code>number</code>): value | ||
<span id="returns-26"></span> | |||
=== Returns === | |||
<code>number</code> | |||
== round == | == round == | ||
| Line 228: | Line 467: | ||
'''Allowed number of parameters:''' 1–1 | '''Allowed number of parameters:''' 1–1 | ||
'''Parameters:''' | <span id="parameters-27"></span> | ||
=== Parameters === | |||
* '''value''' (<code>number</code>): value | |||
<span id="returns-27"></span> | |||
=== Returns === | |||
<code>number</code> | |||
== sql_decimal_output == | |||
normalizes a DECIMAL-derived result to its declared output scale | |||
'''Allowed number of parameters:''' 2–2 | |||
<span id="parameters-28"></span> | |||
=== Parameters === | |||
* '''value''' (<code>number|nil</code>): DECIMAL-derived value | |||
* '''scale''' (<code>int</code>): declared decimal scale | |||
<span id="returns-28"></span> | |||
=== Returns === | |||
<code>number|nil</code> | |||
== sql_abs == | |||
SQL ABS(): returns absolute value, NULL-safe | |||
'''Allowed number of parameters:''' 1–1 | |||
<span id="parameters-29"></span> | |||
=== Parameters === | |||
* '''value''' (<code>number</code>): value | * '''value''' (<code>number</code>): value | ||
'''Returns:''' <code>number</code> | <span id="returns-29"></span> | ||
=== Returns === | |||
<code>number</code> | |||
== sqrt == | |||
returns the square root of a number | |||
'''Allowed number of parameters:''' 1–1 | |||
<span id="parameters-30"></span> | |||
=== Parameters === | |||
* '''value''' (<code>number</code>): value | |||
<span id="returns-30"></span> | |||
=== Returns === | |||
<code>number</code> | |||
== sql_rand == | |||
SQL RAND(): returns a random float in [0,1) | |||
'''Allowed number of parameters:''' 0–0 | |||
<span id="parameters-31"></span> | |||
=== Parameters === | |||
''This function has no parameters.'' | |||
<span id="returns-31"></span> | |||
=== Returns === | |||
<code>number</code> | |||
== parameterize_sql_select_literals == | |||
replaces safe literals in a top-level MySQL SELECT and returns normalized SQL, positional runtime bindings, and its stable shape hash | |||
'''Allowed number of parameters:''' 1–1 | |||
<span id="parameters-32"></span> | |||
=== Parameters === | |||
* '''query''' (<code>string</code>): | |||
<span id="returns-32"></span> | |||
=== Returns === | |||
<code>list</code> | |||
Revision as of 08:08, 27 August 2026
Arithmetic / Logic
int?
tells if the value is a integer
Allowed number of parameters: 1–1
Parameters
- value (
any): value
Returns
bool
number?
tells if the value is a number
Allowed number of parameters: 1–1
Parameters
- value (
any): value
Returns
bool
symbol?
tells if the value is a symbol
Allowed number of parameters: 1–1
Parameters
- value (
any): value
Returns
bool
+
adds two or more numbers
Allowed number of parameters: 0–10000
Parameters
- value... (
number): values to add (variadic)
Returns
number
sql_sum_reduce
adds two SQL SUM values while treating NULL as the empty aggregate identity
Allowed number of parameters: 2–2
Parameters
- left (
number|nil): partial sum - right (
number|nil): next value
Returns
number|nil
-
subtracts two or more numbers from the first one
Allowed number of parameters: 0–10000
Parameters
- value... (
number): values (variadic)
Returns
number
sql_add_numeric_literals
adds two SQL numeric literals using their exact decimal spellings
Allowed number of parameters: 2–2
Parameters
- a (
number): left literal - b (
number): right literal
Returns
number
sql_sub_numeric_literals
subtracts two SQL numeric literals using their exact decimal spellings
Allowed number of parameters: 2–2
Parameters
- a (
number): left literal - b (
number): right literal
Returns
number
*
multiplies two or more numbers
Allowed number of parameters: 0–10000
Parameters
- value... (
number): values (variadic)
Returns
number
/
divides two or more numbers from the first one
Allowed number of parameters: 0–10000
Parameters
- value... (
number): values (variadic)
Returns
number
mod
returns the remainder of integer division (modulo)
Allowed number of parameters: 2–2
Parameters
- a (
number): dividend - b (
number): divisor
Returns
number
<=
compares two numbers or strings; returns nil if either value is nil
Allowed number of parameters: 2–2
Parameters
- a (
any): first value - b (
any): second value
Returns
bool
<
compares two numbers or strings; returns nil if either value is nil
Allowed number of parameters: 2–2
Parameters
- a (
any): first value - b (
any): second value
Returns
bool
>
compares two numbers or strings; returns nil if either value is nil
Allowed number of parameters: 2–2
Parameters
- a (
any): first value - b (
any): second value
Returns
bool
>=
compares two numbers or strings; returns nil if either value is nil
Allowed number of parameters: 2–2
Parameters
- a (
any): first value - b (
any): second value
Returns
bool
equal?
compares two values of the same type, (equal? nil nil) is true
Allowed number of parameters: 2–2
Parameters
- a (
any): first value - b (
any): second value
Returns
bool
equal??
performs a SQL compliant sloppy equality check on primitive values (number, int, string, bool. nil), strings are compared case insensitive, (equal? nil nil) is nil
Allowed number of parameters: 2–2
Parameters
- a (
any): first value - b (
any): second value
Returns
bool
sql_not
negates a SQL predicate while preserving nil as UNKNOWN
Allowed number of parameters: 1–1
Parameters
- value (
any): SQL predicate value
Returns
bool|nil
equal_collate
performs SQL equality with a specified collation (e.g. *_ci case-insensitive, *_bin case-sensitive); returns nil if either arg is nil
Allowed number of parameters: 3–3
Parameters
- a (
any): left side - b (
any): right side - collation (
string): collation name
Returns
bool
notequal_collate
performs SQL inequality with a specified collation; returns nil if either arg is nil
Allowed number of parameters: 3–3
Parameters
- a (
any): left side - b (
any): right side - collation (
string): collation name
Returns
bool
!
negates the boolean value
Allowed number of parameters: 1–1
Parameters
- value (
bool): value
Returns
bool
not
negates the boolean value
Allowed number of parameters: 1–1
Parameters
- value (
bool): value
Returns
bool
nil?
returns true if value is nil
Allowed number of parameters: 1–1
Parameters
- value (
any): value
Returns
bool
min
returns the smallest value
Allowed number of parameters: 0–10000
Parameters
- value... (
number|string): value (variadic)
Returns
number|string
max
returns the highest value
Allowed number of parameters: 0–10000
Parameters
- value... (
number|string): value (variadic)
Returns
number|string
floor
rounds the number down
Allowed number of parameters: 1–1
Parameters
- value (
number): value
Returns
number
ceil
rounds the number up
Allowed number of parameters: 1–1
Parameters
- value (
number): value
Returns
number
round
rounds the number
Allowed number of parameters: 1–1
Parameters
- value (
number): value
Returns
number
sql_decimal_output
normalizes a DECIMAL-derived result to its declared output scale
Allowed number of parameters: 2–2
Parameters
- value (
number|nil): DECIMAL-derived value - scale (
int): declared decimal scale
Returns
number|nil
sql_abs
SQL ABS(): returns absolute value, NULL-safe
Allowed number of parameters: 1–1
Parameters
- value (
number): value
Returns
number
sqrt
returns the square root of a number
Allowed number of parameters: 1–1
Parameters
- value (
number): value
Returns
number
sql_rand
SQL RAND(): returns a random float in [0,1)
Allowed number of parameters: 0–0
Parameters
This function has no parameters.
Returns
number
parameterize_sql_select_literals
replaces safe literals in a top-level MySQL SELECT and returns normalized SQL, positional runtime bindings, and its stable shape hash
Allowed number of parameters: 1–1
Parameters
- query (
string):
Returns
list