OPFN
  • What is this thing?
    • A New Internet
    • Architecture
    • Runtime
  • Installation
    • Environment Setup
  • Quickstart Tutorial
    • "Hello World" Cog
    • Booting, Starting, Caching
    • JSON
    • Cog webserver end-to-end
  • Databases / Cogs
    • Introduction
    • Creating a Cog
    • Using a Cog
    • Inter-Cog Communication
  • Sire Reference
    • Intro
    • Runes
    • Miscellaneous
    • Standard Library
      • Bits (Booleans)
      • Natural Numbers
      • Comparisons
      • Characters and Strings
      • Rows
      • Lists
      • Either
      • Maybe
      • Sets
      • KV Tables
      • Pads
      • Bars
      • Types
  • Deeper
    • Nat Representations
    • R-Expressions
    • Seed files
    • Jets
    • Boot process
    • UI files
  • PLAN
    • In Depth
    • Definition
Powered by GitBook
On this page
  • null
  • arity
  • len
  • idx
  • last
  • get
  • mut
  • put
  • switch
  • c0, c1, c2, c3, c4, c5, c6, c7, c8, c9
  • v0, v1, v2, v3, v4, v5, v6, v7, v8, v9
  • isRow
  • foldr
  • foldl
  • foldr1
  • unfoldr
  • strictRow
  • weld
  • gen
  • fst
  • snd
  • thr
  • map
  • foreach
  • rev
  • curry
  • uncurry
  • rowCons
  • rowSnoc
  • rowApply
  • rowRepel
  • slash
  • slice
  • chunks
  • rep
  • rowIndexed
  • findIdx
  • elemIdx
  • has
  • rowAnd
  • rowOr
  • sum
  • sumOf
  • all
  • any
  • zip
  • zipWith
  • cat
  • catMap
  • take
  • drop
  • rev
  • span
  • splitAt
  • intersperse
  • insert
  • Sorting and Filtering
  • sort
  • sortBy
  • sortOn
  • sortUniq
  • filter
  • delete
  • findIdxMany
  • elemIdxMany
  1. Sire Reference
  2. Standard Library

Rows

PreviousCharacters and StringsNextLists

Last updated 8 months ago

This page is under active development. It may contain bugs or incomplete descriptions.

TODO: Update with function and type signatures.

This module defines operations on rows, which are arrays. Since PLAN is untyped, these are also used as the building blocks for tuples, records, and datatypes.

They are defined with []:

arr=[10 64 42]

arr
[10 64 42]

null

(null xs)
> xs : Row a
> Bool

Checks if a row is empty.

null returns TRUE if the given row is empty, and FALSE otherwise.

null []         == 1
null [1 2 3]    == 0
null [0]        == 0

arity

(arity x)
> x : a
> Nat

Returns the arity of a function or row.

arity returns the number of arguments a function takes, or the number of elements in a row plus one.

arity add        == 2
arity [1 2 3]    == 4
arity []         == 1

len

(len xs)
> xs : Row a
> Nat

Returns the length of a row.

len counts the number of elements in a given row.

len [1 2 3]    == 3
len []         == 0
len [9]        == 1

idx

(idx i xs)
> i  : Nat
> xs : Row a
> a

Retrieves an element from a row at a specified index.

idx returns the element at the given index in the row. Indexing starts at 0.

idx 1 [10 20 30]    == 20
idx 0 [5 6 7]       == 5
idx 2 [1]           == 0 (out of bounds)

last

(last xs)
> xs : Row a
> a

Retrieves an element from the end of a row.

last [10 20 30]    == 30
last [5 6 7]       == 7
last [] 2          == 0

get

(get xs i)
> xs : Row a
> i  : Nat
> a

Retrieves an element from a row at a specified index.

get is an alias for idx. It returns the element at the given index in the row.

get [10 20 30] 1    == 20
get [5 6 7] 0       == 5
get [1] 2           == 0 (out of bounds)

mut

(mut i v xs)
> i  : Nat
> v  : a
> xs : Row a
> Row a

Modifies an element in a row at a specified index.

mut returns a new row with the element at the given index replaced by the provided value.

mut 1 99 [10 20 30]    == [10 99 30]
mut 0 5 [1 2 3]        == [5 2 3]
mut 3 4 [1 2]          == [1 2 0 4]

put

(put xs i v)
> xs : Row a
> i  : Nat
> v  : a
> Row a

Modifies an element in a row at a specified index.

put is an alias for mut. It returns a new row with the element at the given index replaced by the provided value.

put [10 20 30] 1 99    == [10 99 30]
put [1 2 3] 0 5        == [5 2 3]
put [1 2] 3 4          == [1 2 0 4]

switch

(switch i d xs)
> i  : Nat
> d  : b
> xs : Row a
> a

Selects a value from a row based on an index, with a fallback value.

switch returns the element at the given index if it exists, otherwise it returns the fallback value.

switch 1 0 [10 20 30]    == 20
switch 3 0 [10 20 30]    == 0 (fallback)
switch 0 99 []           == 99 (fallback)

c0, c1, c2, c3, c4, c5, c6, c7, c8, c9

Creates a row constructor of the specified arity.

These functions create row constructors of arity 0 to 9 respectively.

c3 1 2 3      == [3 2 1]
c0            == []
c2 b#a b#b    == [b#b b#a]

v0, v1, v2, v3, v4, v5, v6, v7, v8, v9

Creates a row of the specified arity.

These functions create rows of arity 0 to 9 respectively, with the arguments in reverse order.

v3 1 2 3      == [1 2 3]
v0            == []
v2 b#a b#b    == [b#a b#b]

isRow

(isRow x)
> x : a
> Bool

Checks if a value is a row.

isRow returns TRUE if the given value is a row, and FALSE otherwise.

isRow [1 2 3]    == 1
isRow []         == 1
isRow 3          == 0

foldr

(foldr f xs)
> f  : (a > b)
> xs : Row a
> b

Folds a row from right to left.

foldr applies a binary function to a starting value (from the right) and all elements of the row, going from right to left.

foldr sub 0 [1 2 3]    == 1
foldr v2 [] [1 2 3]    == [1 [2 [3 []]]]
foldr add 0 []         == 0

foldl

(foldl f xs)
> f  : (a > b)
> xs : Row a
> b

Folds a row from left to right.

foldl applies a binary function to a starting value (from the left) and all elements of the row, going from left to right.

foldl sub 0 [1 2 3]    == 0
foldl v2 [] [1 2 3]    == [[[[] 1] 2] 3]
foldl add 0 [1]        == 1

foldr1

(foldr1 f xs)
> f  : (a > b)
> xs : Row a
> b

Folds a non-empty row from right to left using the last element as the initial accumulator.

foldr1 sub [1 2 3 10]        == 0
foldr1 strWeld [%a %b %c]    == %abc
foldr1 max [1 5 3 2]         == 5

unfoldr

(unfoldr f s)
> f : (a > b)
> s : a
> a

Builds a row from a seed value using a function that returns either a value and a new seed, or nothing.

unfoldr n&(if (gth n 0) (SOME [n dec-n]) NONE) 5    == [5 4 3 2 1]
unfoldr n&(if (lth n 3) (SOME [n inc-n]) NONE) 0    == [0 1 2]
unfoldr _&NONE 0                                    == []

strictRow

(strictRow x)
> x : a
> Row a

Forces evaluation of all elements in a row.

strictRow [1 2 3]                  == [1 2 3] ; ensures all elements are evaluated
strictRow (map (mul 2) [1 2 3])    == [2 4 6] ; forces computation
strictRow []                       == []

weld

(weld xs ys)
> xs : Row a
> ys : Row a
> Row a

Concatenates two rows.

weld combines two rows into a single row, with the elements of the first row followed by the elements of the second row.

weld [1 2] [3 4]    == [1 2 3 4]
weld [] [5 6]       == [5 6]
weld [1 2] []       == [1 2]

gen

(gen l f)
> l : Nat
> f : (Nat > a)
> Row a

Generates a row based on a function and a length.

gen creates a row of the specified length, where each element is the result of applying the given function to its index.

gen 3 (add 2)    == [2 3 4]
gen 4 id         == [0 1 2 3]
gen 0 | mul 2    == []

fst

(fst xs)
> xs : Row a
> a

Returns the first element of a row.

fst retrieves the leftmost element of a given row.

fst [1 2 3]    == 1
fst [9]        == 9
fst []         == 0

snd

(snd xs)
> xs : Row a
> a

Returns the second element of a row.

snd retrieves the second element of a given row. If the row has fewer than two elements, it returns 0.

snd [1 2 3]    == 2
snd [9]        == 0
snd []         == 0

thr

(thr xs)
> xs : Row a
> a

Returns the third element of a row.

thr retrieves the third element of a given row. If the row has fewer than three elements, it returns 0.

thr [1 2 3 4]    == 3
thr [1 2]        == 0
thr []           == 0

map

(map f xs)
> f  : (a > b)
> xs : Row a
> Row b

Applies a function to each element of a row.

map creates a new row by applying the given function to each element of the input row.

map (mul 2) [1 2 3]            == [2 4 6]
map fst [[1 2] [3 4] [5 6]]    == [1 3 5]
map (add 1) []                 == []

foreach

(foreach xs f)
> xs : Row a
> f  : (a > b)
> Row b

Alias for map with arguments reversed.

foreach is an alias for map. It applies a function to each element of a row.

foreach [1 2 3] (mul 2)            == [2 4 6]
foreach [[1 2] [3 4] [5 6]] fst    == [1 3 5]
foreach [] (add 1)                 == []

rev

(rev xs)
> xs : Row a
> Row a

Reverses a row.

rev creates a new row with the elements of the input row in reverse order.

rev [1 2 3]    == [3 2 1]
rev [9]        == [9]
rev []         == []

curry

(curry f x y)
> f : (Row a > b)
> x : a
> y : a
> a

Converts a function that takes a row to a curried function.

curry takes a function that expects a row as its argument and returns a function that takes two arguments separately.

See the function definition in sire/sire_05_row.sire.

uncurry

(uncurry f xs)
> f  : (a > a)
> xs : Row a
> f (Row a)

Converts a curried function to a function that takes a row.

uncurry takes a function that expects two separate arguments and returns a function that takes a row of two elements.

uncurry add [1 2]    == 3
uncurry sub [5 3]    == 2
uncurry v2 [1 2]     == [1 2]

rowCons

(rowCons e xs)
> e  : a
> xs : Row a
> Row a

Prepends an element to a row.

rowCons creates a new row with the given element as the first element, followed by all elements of the input row.

rowCons 1 [2 3]    == [1 2 3]
rowCons b#a []     == [b#a]
rowCons 0 [1]      == [0 1]

rowSnoc

(rowSnoc xs e)
> xs : Row a
> e  : a
> Row a

Appends an element to a row.

rowSnoc creates a new row with all elements of the input row, followed by the given element as the last element.

rowSnoc [1 2] 3    == [1 2 3]
rowSnoc [] b#a     == [b#a]
rowSnoc [0] 1      == [0 1]

rowApply

(rowApply f xs)
> f  : (a > b)
> xs : Row a
> b

Applies a function to a row of arguments.

rowApply takes a function and a row of arguments, and applies the function to those arguments.

rowApply add [2 3]    == 5
rowApply gte [3 4]    == 0
rowApply lte [3 4]    == 1

rowRepel

(rowRepel f xs)
> f  : (a > b)
> xs : Row a
> b

Applies a function to a row of arguments in reverse order.

rowRepel takes a function and a row of arguments, and applies the function to those arguments in reverse order.

rowRepel add [2 3]    == 5
rowRepel gte [3 4]    == 1
rowRepel lte [3 4]    == 0

slash

(slash xs s e)
> xs : Row a
> s  : Nat
> e  : Nat
> a

Extracts a slice from a row, from index s to index e, padding with zeros if necessary.

slash [1 2 3 4 5] 1 3    == [2 3]
slash [1 2 3] 0 5        == [1 2 3 0 0]
slash [1 2 3] 2 2        == []

slice

(slice xs s e)
> xs : Row a
> s : Nat
> e : Nat
> a

Similar to slash, but doesn't pad with zeros. It returns a slice from index s up to (but not including) index e.

slice [1 2 3 4 5] 1 3    == [2 3]
slice [1 2 3] 0 5        == [1 2 3]
slice [1 2 3] 2 2        == []

chunks

(chunks n xs)
> n  : Nat
> xs : Row a
> Row a

Splits a row into chunks of a specified size.

chunks 2 [1 2 3 4 5]    == [[1 2] [3 4] [5]]
chunks 3 [1 2 3 4]      == [[1 2 3] [4]]
chunks 5 [1 2 3]        == [[1 2 3]]

rep

(rep x n)
> x : a
> n : Nat
> Row a

Creates a row by repeating a value a specified number of times.

rep 3 2         == [3 3]
rep b#aaab 3    == [b#aaab b#aaab b#aaab]
rep [] 2        == [[] []]

rowIndexed

(rowIndexed xs)
> xs : Row a
> Row (Nat, a)

Creates a row of pairs, where each pair contains the index and the corresponding element from the input row.

rowIndexed [10 20 30]       == [[0 10] [1 20] [2 30]]
rowIndexed [b#aba b#bab]    == [[0 b#aba] [1 b#bab]]
rowIndexed []               == []

findIdx

(findIdx f xs d k)
> f  : (a > Bool)
> xs : Row a
> d  : b
> k  : (a > b)
> a

Finds the index of the first element in a row that satisfies a predicate function.

findIdx (lte 5) [1 3 5 7 9] 0 id              == 2
findIdx (lte 10) [1 3 5 7 9] 0 id             == 0
findIdx even [1 3 5 7] {not found} showNat    == {not found}

elemIdx

(elemIdx e xs d k)
> e  : a
> xs : Row a
> d  : a
> k  : a
> a

Finds the index of the first occurrence of a specific element in a row.

elemIdx 5 [1 3 5 7 5] b#{not found} id        == 2
elemIdx b#a [b#b b#a b#c] b#{not found} id    == 1
elemIdx 4 [1 2 3] b#{not found} id            == b#{not found}

has

(has e xs)
> e  : a
> xs : Row a
> Bool

Checks if a row contains a specific element.

has 3 [1 2 3 4 5]      == 1
has b#a [b#b b#c]      == 0
has [] [[1] [2] []]    == 1

rowAnd

(rowAnd xs)
> xs : Row Bool
> Bool

Performs a logical AND operation on all elements of a row.

rowAnd [TRUE TRUE FALSE]    == 0
rowAnd [TRUE TRUE TRUE]     == 1
rowAnd []                   == 1

rowOr

(rowOr xs)
> xs : Row Bool
> Bool

Performs a logical OR operation on all elements of a row.

rowOr [FALSE FALSE TRUE]     == 1
rowOr [FALSE FALSE FALSE]    == 0
rowOr []                     == 0

sum

(sum xs)
> xs : Row Nat
> Nat

Calculates the sum of all elements in a row.

sum [1 2 3 4 5]          == 15
sum [10 (sub 10 3) 3]    == 20
sum []                   == 0

sumOf

(sumOf f xs)
> f  : (a > Nat)
> xs : Row a
> Nat

Applies a function to each element of a row and then calculates the sum of the results.

sumOf (mul 2) [1 2 3 4]    == 20
sumOf (pow 2) [1 2 3]      == 14
sumOf id []                == 0

all

(all f xs)
> f  : (a > Bool)
> xs : Row a
> Bool

Checks if all elements in a row satisfy a given predicate.

all even [2 4 6 8]     == 1
all (lte 0) [1 2 3]    == 1
all id []              == 1

any

(any f xs)
> f  : (a > Bool)
> xs : Row a
> Bool

Checks if any element in a row satisfies a given predicate.

any odd [2 4 5 8]        == 1
any (gte 0) [1 2 3 4]    == 0
any id []                == 0

zip

(zip xs ys)
> xs : Row a
> ys : Row b
> Row (a, b)

Combines two rows into a row of pairs.

zip [1 2 3] [b#a b#b b#c]    == [[1 b#a] [2 b#b] [3 b#c]]
zip [1 2] [b#a b#b b#c]      == [[1 b#a] [2 b#b]]
zip [] [1 2 3]               == []

zipWith

(zipWith f xs y)
> f : (a > b > c)
> xs : Row a
> y : Row b
> Row c

Combines two rows using a given function.

zipWith add [1 2 3] [4 5 6]                == [5 7 9]
zipWith mul [1 2 3] [1 2 3]                == [1 4 9]
zipWith zip [[1 2] [1 2]] [[3 4] [3 4]]    == [[[1 3] [2 4]] [[1 3] [2 4]]]

cat

(cat x)
> xs : Row (Row a)
> Row a

Concatenates a row of rows into a single row.

cat [[1 2 3 4] [3 4] [5]]    == [1 2 3 4 5]
cat [[] [1 2] [3]]           == [1 2 3]
cat []                       == []

catMap

(catMap f x)
> f  : (a > Row b)
> xs : Row a
> Row b

Applies a function to each element of a row and concatenates the results.

catMap (rep 2) [1 2 3]     == [2 2 2 2 2 2]
catMap id [[1 2] [3 4]]    == [1 2 3 4]

take

(take n x)
> n  : Nat
> xs : Row a
> Row a

Returns the first n elements of a row.

take 3 [1 2 3 4 5]    == [1 2 3]
take 2 [b#a b#b]      == [b#a b#b]
take 5 [1 2 3]        == [1 2 3]

drop

(drop n xs)
> n  : Nat
> xs : Row a
> Row a

Removes the first n elements from a row.

drop 2 [1 2 3 4 5]          == [3 4 5]
drop 3 [b#a b#b b#c b#d]    == [b#d]
drop 5 [1 2 3]              == []

rev

(rev xs)
> xs : Row a
> Row a

Reverses the order of elements in a row.

rev [1 2 3 4 5]          == [5 4 3 2 1]
rev [b#a b#b b#c b#d]    == [b#d b#c b#b b#a]
rev []                   == []

span

(span f xs)
> f  : (a > Bool)
> xs : Row a
> Row (Row a)

Splits a row into two parts: the longest prefix that satisfies a predicate and the rest.

span (gte 3) [1 2 3 4 1 2 3 4]    == [[1 2 3] [4 1 2 3 4]]
span even [2 4 6 7 8 9]           == [[2 4 6] [7 8 9]]
span FALSE [1 2 3]                == [[] [1 2 3]]

splitAt

(splitAt i xs)
> i  : Nat
> xs : Row a
> Row (Row a)

Splits a row at a given index.

splitAt 3 [1 2 3 4 5]    == [[1 2 3] [4 5]]
splitAt 0 [1 2 3]        == [[] [1 2 3]]
splitAt 5 [1 2 3]        == [[1 2 3] []]

intersperse

(intersperse e xs)
> e  : a
> xs : Row a
> Row a

Intersperses an element between every element of a row.

intersperse 0 [1 2 3]    == [1 0 2 0 3]
intersperse b#a [b#b]    == [b#b]
intersperse 0 []         == []

insert

(insert i e xs)
> i  : Nat
> e  : a
> xs : Row a
> Row a

Inserts an element at a specified index in a row.

insert 1 b#x [b#a b#b b#c]    == [b#a b#x b#b b#c]
insert 0 1 [1 2 3]            == [1 1 2 3]
insert 3 4 [1 2 3]            == [1 2 3 4]

Sorting and Filtering

sort

(sort xs)
> xs : Row a
> Row a

Sorts a row in ascending order.

sort [3 1 4 1 5]      == [1 1 3 4 5]
sort [b#c b#a b#b]    == [b#a b#b b#c]
sort []               == []

sortBy

(sortBy f xs)
> f  : (a > Nat)
> xs : Row a
> Row a

Sorts a row using a custom comparison function.

sortBy (flip cmp) [1 3 2]      == [3 2 1]
sortBy (cmp) [[1 2] [] [1]]    == [[] [1] [1 2]]

sortOn

(sortOn f xs)
> f  : (a > b)
> xs : Row a
> Row b

Sorts a row by applying a function to each element before comparing.

sortOn (even) [1 3 2]             == [3 1 2]
sortOn len [[1 2] [3] [4 5 6]]    == [[3] [1 2] [4 5 6]]

sortUniq

(sortUniq xs)
> xs : Row a
> Row a

Sorts a row and removes duplicate elements.

sortUniq [3 1 4 1 5 3]    == [1 3 4 5]
sortUniq [b#a b#b b#a]    == [b#a b#b]
sortUniq []               == []

filter

(filter f xs)
> f  : (a > Bool)
> xs : Row a
> Row a

Keeps only the elements of a row that satisfy a predicate.

filter even [1 2 3 4 5]               == [2 4]
filter (neq b#a) [b#a b#b b#a b#c]    == [b#b b#c]
filter (const TRUE) [1 2 3]           == [1 2 3]

delete

(delete e xs)
> e  : a
> xs : Row a
> Row a

Removes all occurrences of a value from a row.

delete 3 [1 2 3 4 3 5]      == [1 2 4 5]
delete b#a [b#a b#b b#a]    == [b#b]
delete 42 [1 2 3]           == [1 2 3]

findIdxMany

(findIdxMany f xs)
> f  : (a > Bool)
> xs : Row a
> List a

Finds all indices where a predicate is satisfied.

findIdxMany even [1 2 3 4 5 6]         == [1 [3 [5 0]]]
findIdxMany (eql b#a) [b#a b#b b#a]    == [0 [2 0]]
findIdxMany (const FALSE) [1 2 3]      == 0

elemIdxMany

(elemIdxMany e xs)
> e  : a
> xs : Row a
> Either (List a) Nat

Finds all indices where a specific element occurs.

elemIdxMany 3 [1 2 3 4 3 5]      == [2 [4 0]]
elemIdxMany b#a [b#a b#b b#a]    == [0 [2 0]]
elemIdxMany 42 [1 2 3]           == 0
data-jetted