Core Library
The definitions provided by this library operate on functions to produce new functions.
Functions
length
Returns the length of the value. For stream-like values, this is how many values are in the stream. For strings, this is how many characters are in the string. For numeric values, this is how many base-10 digits are in the non-fractional part (i.e., the base-10 magnitude of the absolute value).
N.B.: This function will not expand streams. If the tail of the stream is a promise to generate more values, the length of the stream will be inf
, using the sense of “unbounded” rather than the colloquial sense of “too large to count.”
Examples
length("The big bad bear") = 16
length(1..5) = 5
length(list-cons(1..3, 5..6)) = inf
length(12.345) = 2
length(-234) = 3
Implementation
This is implemented internally.
list-cons
Creates a new stream that acts as if the two given streams are concatenated.
Examples
list-cons(1..4, 6..10) = [ 1, 2, 3, 4, 6, 7, 8, 9, 10 ]
Implementation
list-cons := y-combinator(
(self, first, second) :> (
(?first) : [ first', self(self, first..., second) ]
( ) : second
)
)
nest
Composes a function with itself a given number of times.
Examples
nest(f, 3) = f . f . f = { f(f(f(#))) }/1
Implementation
nest := y-combinator(
(self, function, count) :> (
(count > 3) : function . function . function . self(self, function, count-3)
(count = 3) : function . function . function
(count = 2) : function . function
(count = 1) : function
( ) : { () }/1
)
)