Arithmetic / Logic: Difference between revisions

From MemCP
Jump to navigation Jump to search
(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 =


The '''Arithmetic / Logic''' module provides essential mathematical operations and logical comparisons for the SCM programming language. This module includes:
<span id="int"></span>
== int? ==
 
tells if the value is a integer
 
'''Allowed number of parameters:''' 1–1
 
<span id="parameters"></span>
=== Parameters ===


* '''Type checking''': Functions to verify data types (int?, number?, nil?)
* '''value''' (<code>any</code>): value
* '''Basic arithmetic''': Addition (+), subtraction (-), multiplication (*), and division (/)
* '''Comparison operations''': All standard comparison operators (>, <, >=, <=, equal?)
* '''Logical operations''': Boolean negation (!, not) and advanced equality checks
* '''Mathematical functions''': Min/max operations and rounding functions (floor, ceil, round)


These functions form the mathematical foundation for calculations and logical decision-making in SCM programs.
<span id="returns"></span>
=== Returns ===


← Back to [[Full SCM API documentation]]
<code>bool</code>


== int? ==
<span id="number"></span>
== number? ==


tells if the value is a integer
tells if the value is a number


'''Allowed number of parameters:''' 1–1
'''Allowed number of parameters:''' 1–1


'''Parameters:'''
<span id="parameters-1"></span>
=== Parameters ===
 
* '''value''' (<code>any</code>): value
* '''value''' (<code>any</code>): value


'''Returns:''' <code>bool</code>
<span id="returns-1"></span>
=== Returns ===


== number? ==
<code>bool</code>
 
<span id="symbol"></span>
== symbol? ==


tells if the value is a number
tells if the value is a symbol


'''Allowed number of parameters:''' 1–1
'''Allowed number of parameters:''' 1–1


'''Parameters:'''
<span id="parameters-2"></span>
=== Parameters ===
 
* '''value''' (<code>any</code>): value
* '''value''' (<code>any</code>): value


'''Returns:''' <code>bool</code>
<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:''' 2–1000
'''Allowed number of parameters:''' 0–10000
 
<span id="parameters-3"></span>
=== Parameters ===


'''Parameters:'''
* '''value...''' (<code>number</code>): values to add ''(variadic)''
* '''value...''' (<code>number</code>): values to add


'''Returns:''' <code>number</code>
<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:''' 2–1000
'''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 ===


'''Parameters:'''
* '''a''' (<code>number</code>): left literal
* '''value...''' (<code>number</code>): values
* '''b''' (<code>number</code>): right literal


'''Returns:''' <code>number</code>
<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:''' 2–1000
'''Allowed number of parameters:''' 0–10000


'''Parameters:'''
<span id="parameters-8"></span>
* '''value...''' (<code>number</code>): values
=== Parameters ===


'''Returns:''' <code>number</code>
* '''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:''' 2–1000
'''Allowed number of parameters:''' 0–10000


'''Parameters:'''
<span id="parameters-9"></span>
* '''value...''' (<code>number</code>): values
=== Parameters ===


'''Returns:''' <code>number</code>
* '''value...''' (<code>number</code>): values ''(variadic)''


== <= ==
<span id="returns-9"></span>
=== Returns ===


compares two numbers or strings
<code>number</code>
 
== mod ==
 
returns the remainder of integer division (modulo)


'''Allowed number of parameters:''' 2–2
'''Allowed number of parameters:''' 2–2


'''Parameters:'''
<span id="parameters-10"></span>
* '''value...''' (<code>any</code>): values
=== Parameters ===


'''Returns:''' <code>bool</code>
* '''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>
== &lt;= ==
 
compares two numbers or strings; returns nil if either value is nil


'''Allowed number of parameters:''' 2–2
'''Allowed number of parameters:''' 2–2


'''Parameters:'''
<span id="parameters-11"></span>
* '''value...''' (<code>any</code>): values
=== Parameters ===


'''Returns:''' <code>bool</code>
* '''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>
== &lt; ==
 
compares two numbers or strings; returns nil if either value is nil


'''Allowed number of parameters:''' 2–2
'''Allowed number of parameters:''' 2–2


'''Parameters:'''
<span id="parameters-12"></span>
* '''value...''' (<code>any</code>): values
=== Parameters ===
 
* '''a''' (<code>any</code>): first value
* '''b''' (<code>any</code>): second value
 
<span id="returns-12"></span>
=== Returns ===


'''Returns:''' <code>bool</code>
<code>bool</code>


== >= ==
<span id="-5"></span>
== &gt; ==


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


'''Parameters:'''
<span id="parameters-13"></span>
* '''value...''' (<code>any</code>): values
=== Parameters ===


'''Returns:''' <code>bool</code>
* '''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>
== &gt;= ==
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


'''Parameters:'''
<span id="parameters-15"></span>
* '''value...''' (<code>any</code>): values
=== Parameters ===
 
* '''a''' (<code>any</code>): first value
* '''b''' (<code>any</code>): second value


'''Returns:''' <code>bool</code>
<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


'''Parameters:'''
<span id="parameters-16"></span>
* '''value...''' (<code>any</code>): values
=== 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


'''Returns:''' <code>bool</code>
'''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


'''Parameters:'''
<span id="parameters-20"></span>
=== Parameters ===
 
* '''value''' (<code>bool</code>): value
* '''value''' (<code>bool</code>): value


'''Returns:''' <code>bool</code>
<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


'''Parameters:'''
<span id="parameters-21"></span>
=== Parameters ===
 
* '''value''' (<code>bool</code>): value
* '''value''' (<code>bool</code>): value


'''Returns:''' <code>bool</code>
<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


'''Parameters:'''
<span id="parameters-22"></span>
=== Parameters ===
 
* '''value''' (<code>any</code>): value
* '''value''' (<code>any</code>): value


'''Returns:''' <code>bool</code>
<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:''' 1–1000
'''Allowed number of parameters:''' 0–10000


'''Parameters:'''
<span id="parameters-23"></span>
* '''value...''' (<code>number|string</code>): value
=== Parameters ===


'''Returns:''' <code>number|string</code>
* '''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:''' 1–1000
'''Allowed number of parameters:''' 0–10000
 
<span id="parameters-24"></span>
=== Parameters ===
 
* '''value...''' (<code>number|string</code>): value ''(variadic)''


'''Parameters:'''
<span id="returns-24"></span>
* '''value...''' (<code>number|string</code>): value
=== Returns ===


'''Returns:''' <code>number|string</code>
<code>number|string</code>


== floor ==
== floor ==
Line 206: Line 435:
'''Allowed number of parameters:''' 1–1
'''Allowed number of parameters:''' 1–1


'''Parameters:'''
<span id="parameters-25"></span>
=== Parameters ===
 
* '''value''' (<code>number</code>): value
* '''value''' (<code>number</code>): value


'''Returns:''' <code>number</code>
<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


'''Parameters:'''
<span id="parameters-26"></span>
=== Parameters ===
 
* '''value''' (<code>number</code>): value
* '''value''' (<code>number</code>): value


'''Returns:''' <code>number</code>
<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