SCM Builtins: Difference between revisions
(Created page with "# SCM Builtins ## quote returns a symbol or list without evaluating it **Allowed number of parameters:** 1–1 ### Parameters - **symbol** (`symbol`): symbol to quote ### Returns `symbol` ## eval executes the given scheme program in the current environment **Allowed number of parameters:** 1–1 ### Parameters - **code** (`list`): list with head and optional parameters ### Returns `any` ## size compute the memory size of a value **Allowed number of param...") |
No edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
= SCM Builtins = | |||
The '''SCM Builtins''' module provides the core foundational functions for the SCM (Scheme) programming language implementation. These built-in functions handle essential operations including: | |||
* '''Language constructs''': Control flow (if, and, or), variable management (define, set), and code evaluation (eval, quote) | |||
* '''Function operations''': Lambda creation, function application, and error handling (try, error) | |||
* '''Data manipulation''': Type conversion (string, symbol), list operations, and pattern matching | |||
* '''Development tools''': Code optimization, timing measurements, and debugging support | |||
* '''Execution control''': Parallel processing, variable scoping, and source code annotation | |||
This module forms the foundation upon which all other SCM functionality is built, providing the essential primitives needed for Scheme programming. | |||
← Back to [[Full SCM API documentation]] | |||
== quote == | |||
returns a symbol or list without evaluating it | |||
'''Allowed number of parameters:''' 1–1 | |||
'''Parameters:''' | |||
* '''symbol''' (<code>symbol</code>): symbol to quote | |||
'''Returns:''' <code>symbol</code> | |||
== eval == | |||
executes the given scheme program in the current environment | |||
'''Allowed number of parameters:''' 1–1 | |||
'''Parameters:''' | |||
* '''code''' (<code>list</code>): list with head and optional parameters | |||
'''Returns:''' <code>any</code> | |||
== size == | |||
compute the memory size of a value | compute the memory size of a value | ||
'''Allowed number of parameters:''' 1–1 | |||
'''Parameters:''' | |||
* '''value''' (<code>any</code>): value to examine | |||
'''Returns:''' <code>int</code> | |||
== optimize == | |||
optimize the given scheme program | optimize the given scheme program | ||
'''Allowed number of parameters:''' 1–1 | |||
'''Parameters:''' | |||
* '''code''' (<code>list</code>): list with head and optional parameters | |||
'''Returns:''' <code>any</code> | |||
== time == | |||
measures the time it takes to compute the first argument | measures the time it takes to compute the first argument | ||
'''Allowed number of parameters:''' 1–2 | |||
'''Parameters:''' | |||
* '''code''' (<code>any</code>): code to execute | |||
* '''label''' (<code>string</code>): label to print in the log or trace | |||
'''Returns:''' <code>any</code> | |||
== if == | |||
checks a condition and then conditionally evaluates code branches; there might be multiple condition+true-branch clauses | checks a condition and then conditionally evaluates code branches; there might be multiple condition+true-branch clauses | ||
'''Allowed number of parameters:''' 2–1000 | |||
'''Parameters:''' | |||
* '''condition...''' (<code>bool</code>): condition to evaluate | |||
* '''true-branch...''' (<code>returntype</code>): code to evaluate if condition is true | |||
* '''false-branch''' (<code>returntype</code>): code to evaluate if condition is false | |||
'''Returns:''' <code>returntype</code> | |||
== and == | |||
returns true if all conditions evaluate to true | returns true if all conditions evaluate to true | ||
'''Allowed number of parameters:''' 1–1000 | |||
'''Parameters:''' | |||
* '''condition''' (<code>bool</code>): condition to evaluate | |||
'''Returns:''' <code>bool</code> | |||
== or == | |||
returns true if at least one condition evaluates to true | returns true if at least one condition evaluates to true | ||
'''Allowed number of parameters:''' 1–1000 | |||
'''Parameters:''' | |||
* '''condition''' (<code>any</code>): condition to evaluate | |||
'''Returns:''' <code>bool</code> | |||
== coalesce == | |||
returns the first value that has a non-zero value | returns the first value that has a non-zero value | ||
'''Allowed number of parameters:''' 1–1000 | |||
'''Parameters:''' | |||
* '''value''' (<code>returntype</code>): value to examine | |||
'''Returns:''' <code>returntype</code> | |||
== coalesceNil == | |||
returns the first value that has a non-nil value | returns the first value that has a non-nil value | ||
'''Allowed number of parameters:''' 1–1000 | |||
'''Parameters:''' | |||
* '''value''' (<code>returntype</code>): value to examine | |||
'''Returns:''' <code>returntype</code> | |||
== define == | |||
defines or sets a variable in the current environment | defines or sets a variable in the current environment | ||
'''Allowed number of parameters:''' 2–2 | |||
'''Parameters:''' | |||
* '''variable''' (<code>symbol</code>): variable to set | |||
* '''value''' (<code>returntype</code>): value to set the variable to | |||
'''Returns:''' <code>bool</code> | |||
== set == | |||
defines or sets a variable in the current environment | defines or sets a variable in the current environment | ||
'''Allowed number of parameters:''' 2–2 | |||
'''Parameters:''' | |||
* '''variable''' (<code>symbol</code>): variable to set | |||
* '''value''' (<code>returntype</code>): value to set the variable to | |||
'''Returns:''' <code>bool</code> | |||
== error == | |||
halts the whole execution thread and throws an error message | halts the whole execution thread and throws an error message | ||
'''Allowed number of parameters:''' 1–1000 | |||
'''Parameters:''' | |||
* '''value...''' (<code>any</code>): value or message to throw | |||
'''Returns:''' <code>string</code> | |||
== try == | |||
tries to execute a function and returns its result. In case of a failure, the error is fed to the second function and its result value will be used | tries to execute a function and returns its result. In case of a failure, the error is fed to the second function and its result value will be used | ||
'''Allowed number of parameters:''' 2–2 | |||
'''Parameters:''' | |||
* '''func''' (<code>func</code>): function with no parameters that will be called | |||
* '''errorhandler''' (<code>func</code>): function that takes the error as parameter | |||
'''Returns:''' <code>any</code> | |||
== apply == | |||
runs the function with its arguments | runs the function with its arguments | ||
'''Allowed number of parameters:''' 2–2 | |||
'''Parameters:''' | |||
* '''function''' (<code>func</code>): function to execute | |||
* '''arguments''' (<code>list</code>): list of arguments to apply | |||
'''Returns:''' <code>any</code> | |||
== apply_assoc == | |||
runs the function with its arguments but arguments is a assoc list | runs the function with its arguments but arguments is a assoc list | ||
'''Allowed number of parameters:''' 2–2 | |||
'''Parameters:''' | |||
* '''function''' (<code>func</code>): function to execute (must be a lambda) | |||
* '''arguments''' (<code>list</code>): assoc list of arguments to apply | |||
'''Returns:''' <code>symbol</code> | |||
== symbol == | |||
returns a symbol built from that string | returns a symbol built from that string | ||
'''Allowed number of parameters:''' 1–1 | |||
'''Parameters:''' | |||
* '''value''' (<code>string</code>): string value that will be converted into a symbol | |||
'''Returns:''' <code>symbol</code> | |||
== list == | |||
returns a list containing the parameters as alements | returns a list containing the parameters as alements | ||
'''Allowed number of parameters:''' 0–10000 | |||
'''Parameters:''' | |||
* '''value...''' (<code>any</code>): value for the list | |||
'''Returns:''' <code>list</code> | |||
== string == | |||
converts the given value into string | converts the given value into string | ||
'''Allowed number of parameters:''' 1–1 | |||
'''Parameters:''' | |||
* '''value''' (<code>any</code>): any value | |||
'''Returns:''' <code>string</code> | |||
== match == | |||
takes a value evaluates the branch that first matches the given pattern | |||
Patterns can be any of: | Patterns can be any of: | ||
* symbol matches any value and stores is into a variable | |||
* "string" (matches only this string) | |||
* number (matches only this value) | |||
* (symbol "something") will only match the symbol 'something' | |||
* '(subpattern subpattern...) matches a list with exactly these subpatterns | |||
* (concat str1 str2 str3) will decompose a string into one of the following patterns: "prefix" variable, variable "postfix", variable "infix" variable | |||
* (cons a b) will reverse the cons function, so it will match the head of the list with a and the rest with b | |||
* (regex "pattern" text var1 var2...) will match the given regex pattern, store the whole string into text and all capture groups into var1, var2... | |||
'''Allowed number of parameters:''' 3–10000 | |||
** | '''Parameters:''' | ||
* '''value''' (<code>any</code>): value to evaluate | |||
* '''pattern...''' (<code>any</code>): pattern | |||
* '''result...''' (<code>returntype</code>): result value when the pattern matches; this code can use the variables matched in the pattern | |||
* '''default''' (<code>any</code>): (optional) value that is returned when no pattern matches | |||
'''Returns:''' <code>any</code> | |||
== lambda == | |||
returns a function (func) constructed from the given code | returns a function (func) constructed from the given code | ||
'''Allowed number of parameters:''' 2–3 | |||
'''Parameters:''' | |||
* '''parameters''' (<code>symbol|list|nil</code>): if you provide a parameter list, you will have named parameters. If you provide a single symbol, the list of parameters will be provided in that symbol | |||
* '''code''' (<code>any</code>): value that is evaluated when the lambda is called. code can use the parameters provided in the declaration as well es the scope above | |||
* '''numvars''' (<code>number</code>): number of unnamed variables that can be accessed via (var 0) (var 1) etc. | |||
'''Returns:''' <code>func</code> | |||
== begin == | |||
creates a own variable scope, evaluates all sub expressions and returns the result of the last one | creates a own variable scope, evaluates all sub expressions and returns the result of the last one | ||
'''Allowed number of parameters:''' 0–10000 | |||
'''Parameters:''' | |||
* '''expression...''' (<code>any</code>): expressions to evaluate | |||
'''Returns:''' <code>any</code> | |||
== parallel == | |||
executes all parameters in parallel and returns nil if they are finished | executes all parameters in parallel and returns nil if they are finished | ||
'''Allowed number of parameters:''' 1–10000 | |||
'''Parameters:''' | |||
* '''expression...''' (<code>any</code>): expressions to evaluate in parallel | |||
'''Returns:''' <code>any</code> | |||
== source == | |||
annotates the node with filename and line information for better backtraces | annotates the node with filename and line information for better backtraces | ||
'''Allowed number of parameters:''' 4–4 | |||
'''Parameters:''' | |||
* '''filename''' (<code>string</code>): Filename of the code | |||
* '''line''' (<code>number</code>): Line of the code | |||
* '''column''' (<code>number</code>): Column of the code | |||
* '''code''' (<code>returntype</code>): code | |||
'''Returns:''' <code>returntype</code> | |||
== scheme == | |||
parses a scheme expression into a list | parses a scheme expression into a list | ||
'''Allowed number of parameters:''' 1–2 | |||
'''Parameters:''' | |||
* '''code''' (<code>string</code>): Scheme code | |||
* '''filename''' (<code>string</code>): optional filename | |||
'''Returns:''' <code>any</code> | |||
== serialize == | |||
serializes a piece of code into a (hopefully) reparsable string; you shall be able to send that code over network and reparse with (scheme) | serializes a piece of code into a (hopefully) reparsable string; you shall be able to send that code over network and reparse with (scheme) | ||
'''Allowed number of parameters:''' 1–1 | |||
'''Parameters:''' | |||
* '''code''' (<code>list</code>): Scheme code | |||
'''Returns:''' <code>string</code> |
Latest revision as of 18:27, 25 August 2025
SCM Builtins
The SCM Builtins module provides the core foundational functions for the SCM (Scheme) programming language implementation. These built-in functions handle essential operations including:
- Language constructs: Control flow (if, and, or), variable management (define, set), and code evaluation (eval, quote)
- Function operations: Lambda creation, function application, and error handling (try, error)
- Data manipulation: Type conversion (string, symbol), list operations, and pattern matching
- Development tools: Code optimization, timing measurements, and debugging support
- Execution control: Parallel processing, variable scoping, and source code annotation
This module forms the foundation upon which all other SCM functionality is built, providing the essential primitives needed for Scheme programming.
← Back to Full SCM API documentation
quote
returns a symbol or list without evaluating it
Allowed number of parameters: 1–1
Parameters:
- symbol (
symbol
): symbol to quote
Returns: symbol
eval
executes the given scheme program in the current environment
Allowed number of parameters: 1–1
Parameters:
- code (
list
): list with head and optional parameters
Returns: any
size
compute the memory size of a value
Allowed number of parameters: 1–1
Parameters:
- value (
any
): value to examine
Returns: int
optimize
optimize the given scheme program
Allowed number of parameters: 1–1
Parameters:
- code (
list
): list with head and optional parameters
Returns: any
time
measures the time it takes to compute the first argument
Allowed number of parameters: 1–2
Parameters:
- code (
any
): code to execute - label (
string
): label to print in the log or trace
Returns: any
if
checks a condition and then conditionally evaluates code branches; there might be multiple condition+true-branch clauses
Allowed number of parameters: 2–1000
Parameters:
- condition... (
bool
): condition to evaluate - true-branch... (
returntype
): code to evaluate if condition is true - false-branch (
returntype
): code to evaluate if condition is false
Returns: returntype
and
returns true if all conditions evaluate to true
Allowed number of parameters: 1–1000
Parameters:
- condition (
bool
): condition to evaluate
Returns: bool
or
returns true if at least one condition evaluates to true
Allowed number of parameters: 1–1000
Parameters:
- condition (
any
): condition to evaluate
Returns: bool
coalesce
returns the first value that has a non-zero value
Allowed number of parameters: 1–1000
Parameters:
- value (
returntype
): value to examine
Returns: returntype
coalesceNil
returns the first value that has a non-nil value
Allowed number of parameters: 1–1000
Parameters:
- value (
returntype
): value to examine
Returns: returntype
define
defines or sets a variable in the current environment
Allowed number of parameters: 2–2
Parameters:
- variable (
symbol
): variable to set - value (
returntype
): value to set the variable to
Returns: bool
set
defines or sets a variable in the current environment
Allowed number of parameters: 2–2
Parameters:
- variable (
symbol
): variable to set - value (
returntype
): value to set the variable to
Returns: bool
error
halts the whole execution thread and throws an error message
Allowed number of parameters: 1–1000
Parameters:
- value... (
any
): value or message to throw
Returns: string
try
tries to execute a function and returns its result. In case of a failure, the error is fed to the second function and its result value will be used
Allowed number of parameters: 2–2
Parameters:
- func (
func
): function with no parameters that will be called - errorhandler (
func
): function that takes the error as parameter
Returns: any
apply
runs the function with its arguments
Allowed number of parameters: 2–2
Parameters:
- function (
func
): function to execute - arguments (
list
): list of arguments to apply
Returns: any
apply_assoc
runs the function with its arguments but arguments is a assoc list
Allowed number of parameters: 2–2
Parameters:
- function (
func
): function to execute (must be a lambda) - arguments (
list
): assoc list of arguments to apply
Returns: symbol
symbol
returns a symbol built from that string
Allowed number of parameters: 1–1
Parameters:
- value (
string
): string value that will be converted into a symbol
Returns: symbol
list
returns a list containing the parameters as alements
Allowed number of parameters: 0–10000
Parameters:
- value... (
any
): value for the list
Returns: list
string
converts the given value into string
Allowed number of parameters: 1–1
Parameters:
- value (
any
): any value
Returns: string
match
takes a value evaluates the branch that first matches the given pattern
Patterns can be any of:
- symbol matches any value and stores is into a variable
- "string" (matches only this string)
- number (matches only this value)
- (symbol "something") will only match the symbol 'something'
- '(subpattern subpattern...) matches a list with exactly these subpatterns
- (concat str1 str2 str3) will decompose a string into one of the following patterns: "prefix" variable, variable "postfix", variable "infix" variable
- (cons a b) will reverse the cons function, so it will match the head of the list with a and the rest with b
- (regex "pattern" text var1 var2...) will match the given regex pattern, store the whole string into text and all capture groups into var1, var2...
Allowed number of parameters: 3–10000
Parameters:
- value (
any
): value to evaluate - pattern... (
any
): pattern - result... (
returntype
): result value when the pattern matches; this code can use the variables matched in the pattern - default (
any
): (optional) value that is returned when no pattern matches
Returns: any
lambda
returns a function (func) constructed from the given code
Allowed number of parameters: 2–3
Parameters:
- parameters (
symbol|list|nil
): if you provide a parameter list, you will have named parameters. If you provide a single symbol, the list of parameters will be provided in that symbol - code (
any
): value that is evaluated when the lambda is called. code can use the parameters provided in the declaration as well es the scope above - numvars (
number
): number of unnamed variables that can be accessed via (var 0) (var 1) etc.
Returns: func
begin
creates a own variable scope, evaluates all sub expressions and returns the result of the last one
Allowed number of parameters: 0–10000
Parameters:
- expression... (
any
): expressions to evaluate
Returns: any
parallel
executes all parameters in parallel and returns nil if they are finished
Allowed number of parameters: 1–10000
Parameters:
- expression... (
any
): expressions to evaluate in parallel
Returns: any
source
annotates the node with filename and line information for better backtraces
Allowed number of parameters: 4–4
Parameters:
- filename (
string
): Filename of the code - line (
number
): Line of the code - column (
number
): Column of the code - code (
returntype
): code
Returns: returntype
scheme
parses a scheme expression into a list
Allowed number of parameters: 1–2
Parameters:
- code (
string
): Scheme code - filename (
string
): optional filename
Returns: any
serialize
serializes a piece of code into a (hopefully) reparsable string; you shall be able to send that code over network and reparse with (scheme)
Allowed number of parameters: 1–1
Parameters:
- code (
list
): Scheme code
Returns: string