Skip to content

Instantly share code, notes, and snippets.

@drkameleon
Created November 5, 2024 13:13
Show Gist options
  • Select an option

  • Save drkameleon/cb8cdd9082930b46da79f1235d26b8bf to your computer and use it in GitHub Desktop.

Select an option

Save drkameleon/cb8cdd9082930b46da79f1235d26b8bf to your computer and use it in GitHub Desktop.
AI Training

Arithmetic

add

add given values and return result

Arguments

  • valueA (:integer,:floating,:complex,:rational,:literal,:pathliteral,:quantity,:color,:object)
  • valueB (:integer,:floating,:complex,:rational,:quantity,:color,:object)

Returns

:integer,:floating,:complex,:rational,:quantity,:color,:object,:nothing

Examples

print add 1 2      ; 3
print 1 + 3        ; 4
a: 4
add 'a 1           ; a: 5

dec

decrease given value by 1

Arguments

  • value (:integer,:floating,:complex,:rational,:literal,:pathliteral,:quantity,:object)

Returns

:integer,:floating,:complex,:rational,:quantity,:object,:nothing

Examples

print dec 5        ; 4
a: 4
dec 'a             ; a: 3

div

perform integer division between given values and return result

Arguments

  • valueA (:integer,:floating,:complex,:rational,:literal,:pathliteral,:quantity,:object)
  • valueB (:integer,:floating,:complex,:rational,:quantity,:object)

Returns

:integer,:floating,:complex,:rational,:quantity,:object,:nothing

Examples

print div 5 2      ; 2
print 9 / 3        ; 3
a: 6
div 'a 3           ; a: 2

divmod

perform integer division between given values and return tuple with quotient and remainder

Arguments

  • valueA (:integer,:floating,:complex,:rational,:literal,:pathliteral,:quantity)
  • valueB (:integer,:floating,:complex,:rational,:quantity)

Returns

:block,:nothing

Examples

print divmod 15 5       ; 3 0
print 14 /% 3           ; 4 2
[q,r]: 10 /% 3          ; q: 3, r: 1
a: 6
divmod 'a 4             ; a: [1, 2]

fdiv

divide given values and return result

Arguments

  • valueA (:integer,:floating,:rational,:literal,:pathliteral,:quantity,:object)
  • valueB (:integer,:floating,:rational,:quantity)

Returns

:floating,:rational,:quantity,:object,:nothing

Examples

print fdiv 5 2     ; 2.5
a: 6
fdiv 'a 3          ; a: 2.0

inc

increase given value by 1

Arguments

  • value (:integer,:floating,:complex,:rational,:literal,:pathliteral,:quantity,:object)

Returns

:integer,:floating,:complex,:rational,:quantity,:object,:nothing

Examples

print inc 5        ; 6
a: 4
inc 'a             ; a: 5

mod

calculate the modulo of given values and return result

Arguments

  • valueA (:integer,:floating,:rational,:literal,:pathliteral,:quantity,:object)
  • valueB (:integer,:floating,:rational,:quantity)

Returns

:integer,:floating,:rational,:quantity,:object,:nothing

Examples

print mod 5 2      ; 1
print 9 % 3        ; 0
a: 8
mod 'a 3           ; a: 2

mul

calculate the product of given values and return result

Arguments

  • valueA (:integer,:floating,:complex,:rational,:literal,:pathliteral,:quantity,:object)
  • valueB (:integer,:floating,:complex,:rational,:quantity,:object)

Returns

:integer,:floating,:complex,:rational,:quantity,:object,:nothing

Examples

print mul 1 2      ; 2
print 2 * 3        ; 6
a: 5
mul 'a 2           ; a: 10

neg

reverse sign of given value and return it

Arguments

  • value (:integer,:floating,:complex,:rational,:literal,:pathliteral,:quantity,:object)

Returns

:integer,:floating,:complex,:rational,:quantity,:object,:nothing

Examples

print neg 1        ; -1
a: 5
neg 'a             ; a: -5

pow

calculate the power of given values and return result

Arguments

  • valueA (:integer,:floating,:complex,:rational,:literal,:pathliteral,:quantity,:object)
  • valueB (:integer,:floating)

Returns

:integer,:floating,:complex,:rational,:quantity,:object,:nothing

Examples

print pow 2 3      ; 8
print 3 ^ 2        ; 9
a: 5
pow 'a 2           ; a: 25

sub

subtract given values and return result

Arguments

  • valueA (:integer,:floating,:complex,:rational,:literal,:pathliteral,:quantity,:color,:object)
  • valueB (:integer,:floating,:complex,:rational,:quantity,:color,:object)

Returns

:integer,:floating,:complex,:rational,:quantity,:color,:object,:nothing

Examples

print sub 2 1      ; 1
print 5 - 3        ; 2
a: 7
sub 'a 2           ; a: 5

Bitwise

and

calculate the binary AND for the given values

Arguments

  • valueA (:integer,:literal,:pathliteral,:binary)
  • valueB (:integer,:binary)

Returns

:integer,:binary,:nothing

Examples

print and 2 3      ; 2
a: 2
and 'a 3           ; a: 2

nand

calculate the binary NAND for the given values

Arguments

  • valueA (:integer,:literal,:pathliteral,:binary)
  • valueB (:integer,:binary)

Returns

:integer,:binary,:nothing

Examples

print nand 2 3     ; -3
a: 2
nand 'a 3          ; a: -3

nor

calculate the binary NOR for the given values

Arguments

  • valueA (:integer,:literal,:pathliteral,:binary)
  • valueB (:integer,:binary)

Returns

:integer,:binary,:nothing

Examples

print nor 2 3      ; -4
a: 2
nor 'a 3           ; a: -4

not

calculate the binary complement the given value

Arguments

  • value (:integer,:literal,:pathliteral,:binary)

Returns

:integer,:binary,:nothing

Examples

print not 123      ; -124
a: 123
not 'a             ; a: -124

or

calculate the binary OR for the given values

Arguments

  • valueA (:integer,:literal,:pathliteral,:binary)
  • valueB (:integer,:binary)

Returns

:integer,:binary,:nothing

Examples

print or 2 3       ; 3
a: 2
or 'a 3            ; a: 3

shl

shift-left first value bits by second value

Arguments

  • value (:integer,:literal,:pathliteral)
  • bits (:integer)

Options

  • safe (:logical): check for overflows

Returns

:integer,:nothing

Examples

print shl 2 3      ; 16
a: 2
shl 'a 3           ; a: 16

shr

shift-right first value bits by second value

Arguments

  • value (:integer,:literal,:pathliteral)
  • bits (:integer)

Returns

:integer,:nothing

Examples

print shr 16 3     ; 2
a: 16
shr 'a 3           ; a: 2

xnor

calculate the binary XNOR for the given values

Arguments

  • valueA (:integer,:literal,:pathliteral,:binary)
  • valueB (:integer,:binary)

Returns

:integer,:binary,:nothing

Examples

print xnor 2 3     ; -2
a: 2
xnor 'a 3          ; a: -2

xor

calculate the binary XOR for the given values

Arguments

  • valueA (:integer,:literal,:pathliteral,:binary)
  • valueB (:integer,:binary)

Returns

:integer,:binary,:nothing

Examples

print xor 2 3      ; 1
a: 2
xor 'a 3           ; a: 1

Collections

append

append value to given collection

Arguments

  • collection (:char,:string,:literal,:pathliteral,:binary,:object,:block)
  • value (:any)

Returns

:string,:binary,:object,:block,:nothing

Examples

append "hell" "o"         ; => "hello"
append [1 2 3] 4          ; => [1 2 3 4]
append [1 2 3] [4 5]      ; => [1 2 3 4 5]
print "hell" ++ "o!"      ; hello!
print [1 2 3] ++ [4 5]    ; [1 2 3 4 5]
a: "hell"
append 'a "o"
print a                   ; hello
b: [1 2 3]
'b ++ 4
print b                   ; [1 2 3 4]

array

create array from given block, by reducing/calculating all internal values

Arguments

  • source (:any)

Options

  • of (:integer,:block): initialize an empty n-dimensional array with given dimensions

Returns

:block

Examples

none: @[]               ; none: []
a: @[1 2 3]             ; a: [1 2 3]

b: 5
c: @[b b+1 b+2]         ; c: [5 6 7]

d: @[
    3+1
    print "we are in the block"
    123
    print "yep"
]
; we are in the block
; yep
; => [4 123]
; initializing empty array with initial value
x: array.of: 2 "done"
inspect.muted x
; [ :block
;     done :string
;     done :string
; ]
; initializing empty n-dimensional array with initial value
x: array.of: [3 4] 0          ; initialize a 3x4 2D array
                                ; with zeros
; => [[0 0 0 0] [0 0 0 0] [0 0 0 0]]

chop

remove last item from given collection

Arguments

  • collection (:string,:literal,:pathliteral,:block)

Options

  • times (:integer): remove multiple items

Returns

:string,:block,:nothing

Examples

chop "hellox"               ; => "hello"
chop chop "hellox"          ; => "hell"
str: "some text"
chop.times:5 str            ; => some
chop.times: neg 5 str       ; => text
arr: @1..10
chop.times:3 'arr
arr                         ; => [1 2 3 4 5 6 7]
chop [1 2 3]                ; => [1 2]
chop.times:1 [1 2 3]        ; => [1 2]
chop.times:2 [1 2 3]        ; => [1]
chop.times:3 [1 2 3]        ; => []
chop.times:4 [1 2 3]        ; => []
chop.times: neg 1 [1 2 3]   ; => [2 3]
chop.times: neg 2 [1 2 3]   ; => [3]

combine

get all possible combinations of the elements in given collection

Arguments

  • collection (:block)

Options

  • by (:integer): define size of each set
  • repeated (:logical): allow for combinations with repeated elements
  • count (:logical): just count the number of combinations

Returns

:integer,:block

Examples

combine [A B C]
; => [[A B C]]

combine.repeated [A B C]
; => [[A A A] [A A B] [A A C] [A B B] [A B C] [A C C] [B B B] [B B C] [B C C] [C C C]]
combine.by:2 [A B C]
; => [[A B] [A C] [B C]]

combine.repeated.by:2 [A B C]
; => [[A A] [A B] [A C] [B B] [B C] [C C]]

combine.repeated.by: 3 [A B]
; => [[A A A] [A A B] [A B B] [B B B]]

combine.count [A B C]
; => 1

combine.count.repeated.by:2 [A B C]
; => 6

contains?

check if collection contains given value

Arguments

  • collection (:string,:dictionary,:object,:block,:range)
  • value (:any)

Options

  • at (:integer): check at given location within collection
  • deep (:logical): searches recursively in deep for a value.

Returns

:logical

Examples

arr: [1 2 3 4]

contains? arr 5             ; => false
contains? arr 2             ; => true
user: #[
    name: "John"
    surname: "Doe"
]

contains? dict "John"       ; => true
contains? dict "Paul"       ; => false

contains? keys dict "name"  ; => true
contains? "hello" "x"       ; => false
contains? "hello" `h`       ; => true
contains?.at:1 "hello" "el" ; => true
contains?.at:4 "hello" `o`  ; => true
print contains?.at:2 ["one" "two" "three"] "two"
; false

print contains?.at:1 ["one" "two" "three"] "two"
; true
print contains?.deep [1 2 4 [3 4 [5 6] 7] 8 [9 10]] 6
; true
user: #[ 
    name: "John" surname: "Doe"
    mom: #[ name: "Jane" surname: "Doe" ]
]

print contains?.deep user "Jane"
; true

couple

get combination of elements in given collections as array of tuples

Arguments

  • collectionA (:block)
  • collectionB (:block)

Returns

:block

Examples

couple ["one" "two" "three"] [1 2 3]
; => [[1 "one"] [2 "two"] [3 "three"]]

decouple

get tuple of collections from a coupled collection of tuples

Arguments

  • collection (:literal,:pathliteral,:block)

Returns

:block

Examples

c: couple ["one" "two" "three"] [1 2 3]
; c: [[1 "one"] [2 "two"] [3 "three"]]

decouple c
; => ["one" "two" "three"] [1 2 3]

dictionary

create dictionary from given block or file, by getting all internal symbols

Arguments

  • source (:string,:block)

Options

  • with (:block): embed given symbols
  • raw (:logical): create dictionary from raw block
  • lower (:logical): automatically convert all keys to lowercase

Returns

:dictionary

Examples

none: #[]               ; none: []
a: #[
    name: "John"
    age: 34
]
; a: [name: "John", age: 34]

d: #[
    name: "John"
    print "we are in the block"
    age: 34
    print "yep"
]
; we are in the block
; yep
; d: [name: "John", age: 34]
inspect fromBlock: #.raw [a b c d]
; [ :dictionary
;         a  :        b :word
;         c  :        d :word
; ]
e: #.lower [
    Name: "John"
    suRnaMe: "Doe"
    AGE: 35
]
; e: [name:John, surname:Doe, age:35]

drop

remove first item from given collection

Arguments

  • collection (:string,:literal,:pathliteral,:block)

Options

  • times (:integer): remove multiple items

Returns

:string,:block,:nothing

Examples

drop "xhello"               ; => "hello"
drop drop "xhello"          ; => "ello"
str: "some text"
drop.times:5 str            ; => text
drop.times: neg 5 str       ; => some
arr: @1..10
drop.times:3 'arr
arr                         ; => [4 5 6 7 8 9 10]
drop [1 2 3]                ; => [2 3]
drop.times:1 [1 2 3]        ; => [2 3]
drop.times:2 [1 2 3]        ; => [3]
drop.times:3 [1 2 3]        ; => []
drop.times:4 [1 2 3]        ; => []
drop.times: neg 1 [1 2 3]   ; => [1 2]
drop.times: neg 2 [1 2 3]   ; => [1]

empty

empty given collection

Arguments

  • collection (:literal,:pathliteral)

Returns

:nothing

Examples

a: [1 2 3]
empty 'a              ; a: []
str: "some text"
empty 'str            ; str: ""

empty?

check if given collection is empty

Arguments

  • collection (:null,:string,:dictionary,:block)

Returns

:logical

Examples

empty? ""             ; => true
empty? []             ; => true
empty? #[]            ; => true

empty? [1 "two" 3]    ; => false

extend

get new dictionary by merging given ones

Arguments

  • parent (:literal,:pathliteral,:dictionary)
  • additional (:dictionary)

Returns

:dictionary

Examples

person: #[ name: "john" surname: "doe" ]

print extend person #[ age: 35 ]
; [name:john surname:doe age:35]

first

return the first item of the given collection

Arguments

  • collection (:string,:block,:range)

Options

  • n (:integer): get first n items

Returns

:null,:any

Examples

print first "this is some text"       ; t
print first ["one" "two" "three"]     ; one
print first.n:2 ["one" "two" "three"] ; one two

flatten

flatten given collection by eliminating nested blocks

Arguments

  • collection (:literal,:pathliteral,:block)

Options

  • once (:logical): do not perform recursive flattening

Returns

:block

Examples

arr: [[1 2 3] [4 5 6]]
print flatten arr
; 1 2 3 4 5 6
arr: [[1 2 3] [4 5 6]]
flatten 'arr
; arr: [1 2 3 4 5 6]
flatten [1 [2 3] [4 [5 6]]]
; => [1 2 3 4 5 6]
flatten.once [1 [2 3] [4 [5 6]]]
; => [1 2 3 4 [5 6]]

get

get collection's item by given index

Arguments

  • collection (:complex,:string,:error,:errorkind,:date,:binary,:dictionary,:object,:store,:block,:range,:bytecode)
  • index (:any)

Returns

:any

Examples

user: #[
    name: "John"
    surname: "Doe"
]

print user\name               ; John

print get user 'surname       ; Doe
print user\surname            ; Doe
arr: ["zero" "one" "two"]

print arr\1                   ; one

print get arr 2               ; two
y: 2
print arr\[y]                 ; two
str: "Hello world!"

print str\0                   ; H

print get str 1               ; e
z: 0
print str\[z+1]               ; e
print str\[0..4]              ; Hello
a: to :complex [1 2]
print a\real                  ; 1.0
print a\imaginary             ; 2.0
print a\1                     ; 2.0

in?

check if value exists in given collection

Arguments

  • value (:any)
  • collection (:string,:dictionary,:object,:block,:range)

Options

  • at (:integer): check at given location within collection
  • deep (:logical): searches recursively in deep for a value.

Returns

:logical

Examples

arr: [1 2 3 4]

in? 5 arr             ; => false
in? 2 arr             ; => true
user: #[
    name: "John"
    surname: "Doe"
]

in? "John" dict       ; => true
in? "Paul" dict       ; => false

in? "name" keys dict  ; => true
in? "x" "hello"       ; => false
in? `h` "hello"       ; => true
in?.at:1 "el" "hello" ; => true
in?.at:4 `o` "hello"  ; => true
print in?.at:2 "two" ["one" "two" "three"]
; false

print in?.at:1 "two" ["one" "two" "three"]
; true
print in?.deep 6 [1 2 4 [3 4 [5 6] 7] 8 [9 10]]
; true
user: #[ 
    name: "John" surname: "Doe"
    mom: #[ name: "Jane" surname: "Doe" ]
]

print in?.deep "Jane" user
; true

index

return first index of value in given collection

Arguments

  • collection (:string,:dictionary,:block,:range)
  • value (:any)

Returns

:null,:integer,:string

Examples

ind: index "hello" "e"
print ind                 ; 1
print index [1 2 3] 3     ; 2
type index "hello" "x"
; :null

insert

insert value in collection at given index

Arguments

  • collection (:string,:literal,:pathliteral,:dictionary,:block)
  • index (:integer,:string)
  • value (:any)

Returns

:string,:dictionary,:block,:nothing

Examples

insert [1 2 3 4] 0 "zero"
; => ["zero" 1 2 3 4]

print insert "heo" 2 "ll"
; hello
dict: #[
    name: John
]

insert 'dict 'name "Jane"
; dict: [name: "Jane"]

key?

check if collection contains given key

Arguments

  • collection (:dictionary,:object)
  • key (:any)

Returns

:logical

Examples

user: #[
    name: "John"
    surname: "Doe"
]

key? user 'age            ; => false
if key? user 'name [
    print ["Hello" user\name]
]
; Hello John

keys

get list of keys for given collection

Arguments

  • dictionary (:dictionary,:object)

Returns

:block

Examples

user: #[
    name: "John"
    surname: "Doe"
]

keys user
=> ["name" "surname"]

last

return the last item of the given collection

Arguments

  • collection (:string,:block,:range)

Options

  • n (:integer): get last n items

Returns

:null,:any

Examples

print last "this is some text"       ; t
print last ["one" "two" "three"]     ; three
print last.n:2 ["one" "two" "three"] ; two three

max

get maximum element in given collection

Arguments

  • collection (:block,:range)

Options

  • index (:logical): retrieve index of maximum element

Returns

:null,:any

Examples

print max [4 2 8 5 1 9]       ; 9

min

get minimum element in given collection

Arguments

  • collection (:block,:range)

Options

  • index (:logical): retrieve index of minimum element

Returns

:null,:any

Examples

print min [4 2 8 5 1 9]       ; 1

one?

check if given number or collection size is one

Arguments

  • number (:null,:integer,:floating,:string,:dictionary,:block,:range)

Returns

:logical

Examples

one? 5              ; => false
one? 4-3            ; => true
one? 1.0            ; => true
one? 0.0            ; => false
items: ["apple"]
one? items          ; => true

items: [1 2 3]
one? items          ; => false
one? ø              ; => false

permutate

get all possible permutations of the elements in given collection

Arguments

  • collection (:block)

Options

  • by (:integer): define size of each set
  • repeated (:logical): allow for permutations with repeated elements
  • count (:logical): just count the number of permutations

Returns

:block

Examples

permutate [A B C]
; => [[A B C] [A C B] [B A C] [B C A] [C A B] [C B A]]

permutate.repeated [A B C]
; => [[A A A] [A A B] [A A C] [A B A] [A B B] [A B C] [A C A] [A C B] [A C C] [B A A] [B A B] [B A C] [B B A] [B B B] [B B C] [B C A] [B C B] [B C C] [C A A] [C A B] [C A C] [C B A] [C B B] [C B C] [C C A] [C C B] [C C C]]
permutate.by:2 [A B C]
; => [[A B] [A C] [B A] [B C] [C A] [C B]]

permutate.repeated.by:2 [A B C]
; => [[A A] [A B] [A C] [B A] [B B] [B C] [C A] [C B] [C C]]

permutate.repeated.by:3 [A B]
; => [[A A A] [A A B] [A B A] [A B B] [B A A] [B A B] [B B A] [B B B]]

permutate.count [A B C]
; => 6

permutate.count.repeated.by:2 [A B C]
; => 9

pop

remove and return the last item from given collection

Arguments

  • collection (:literal,:pathliteral)

Options

  • n (:integer): remove multiple items. (Must be greater than 0.)

Returns

:any

Examples

a: [0 1 2 3 4 5]
b: pop 'a

inspect a
; [ :block
;         0 :integer
;         1 :integer
;         2 :integer
;         3 :integer
;         4 :integer
; ]
inspect b     ; 5 :integer


b: pop.n: 2 'a

inspect a
; [ :block
;         0 :integer
;         1 :integer
;         2 :integer
; ]
inspect b
; [ :block
;         3 :integer
;         4 :integer
; ]
a: "Arturoo"
b: pop 'a

inspect a     ; Arturo :string
inspect b     ; o :char

b: pop.n: 3 'a

inspect a     ; Art :string
inspect b     ; uro :string

prepend

prepend value to given collection

Arguments

  • collection (:char,:string,:literal,:pathliteral,:binary,:block)
  • value (:any)

Returns

:string,:binary,:block,:nothing

Examples

prepend "uro" "Art"     ; => "Arturo"
prepend [2 3 4] 1       ; => [1 2 3 4]
prepend [3 4 5] [1 2]   ; => [1 2 3 4 5]
a: "pend"
prepend 'a "pre"
print a                 ; prepend

range

get list of values in given range (inclusive)

Arguments

  • from (:integer,:char)
  • to (:integer,:floating,:char)

Options

  • step (:integer): use step between range values

Returns

:range

Examples


remove

remove value from given collection

Arguments

  • collection (:string,:literal,:pathliteral,:dictionary,:object,:block)
  • value (:any)

Options

  • key (:logical): remove dictionary key
  • once (:logical): remove only first occurence
  • index (:logical): remove specific index
  • prefix (:logical): remove first matching prefix from string
  • suffix (:logical): remove first matching suffix from string
  • instance (:logical): remove an instance of a block, instead of its elements.

Returns

:string,:dictionary,:block,:nothing

Examples

remove "hello" "l"        ; => "heo"
print "hello" -- "l"      ; heo
str: "mystring"
remove 'str "str"
print str                 ; mying
print remove.once "hello" "l"
; helo

; Remove each element of given block from collection once
remove.once  [1 2 [1 2] 3 4 1 2 [1 2] 3 4]  [1 2]
; [[1 2] 3 4 1 2 [1 2] 3 4]
remove [1 2 3 4] 4        ; => [1 2 3]
remove.instance [1 [6 2] 5 3 [6 2] 4 5 6] [6 2]  ; => [1 5 3 4 5 6]
remove.instance.once [1 [6 2] 5 3 [6 2] 4 5 6] [6 2]  ; => [1 5 3 [6 2] 4 5 6]

repeat

repeat value the given number of times and return new one

Arguments

  • value (:literal,:pathliteral,:any)
  • times (:integer)

Returns

:string,:block

Examples

print repeat "hello" 3
; hellohellohello
repeat [1 2 3] 3
; => [1 2 3 1 2 3 1 2 3]
repeat 5 3
; => [5 5 5]
repeat [[1 2 3]] 3
; => [[1 2 3] [1 2 3] [1 2 3]]

reverse

reverse given collection

Arguments

  • collection (:string,:literal,:pathliteral,:block,:range)

Options

  • exact (:logical): make sure the reverse range contains the same elements

Returns

:string,:block,:nothing

Examples

print reverse [1 2 3 4]           ; 4 3 2 1
print reverse "Hello World"       ; dlroW olleH
str: "my string"
reverse 'str
print str                         ; gnirts ym

rotate

right-rotate collection by given distance

Arguments

  • collection (:string,:literal,:pathliteral,:block)
  • distance (:integer)

Options

  • left (:logical): left rotation

Returns

:string,:block,:nothing

Examples

rotate [a b c d e] 1            ; => [e a b c d]
rotate.left [a b c d e] 1       ; => [b c d e a]

rotate 1..6 4                   ; => [3 4 5 6 1 2]

sample

get a random element from given collection

Arguments

  • collection (:block,:range)

Returns

:null,:any

Examples

sample [1 2 3]        ; (return a random number from 1 to 3)
print sample ["apple" "appricot" "banana"]
; apple

set

set collection's item at index to given value

Arguments

  • collection (:string,:binary,:dictionary,:object,:store,:block,:bytecode)
  • index (:any)
  • value (:any)

Returns

:nothing

Examples

myDict: #[
    name: "John"
    age: 34
]

set myDict 'name "Michael"        ; => [name: "Michael", age: 34]
arr: [1 2 3 4]
set arr 0 "one"                   ; => ["one" 2 3 4]

arr\1: "dos"                      ; => ["one" "dos" 3 4]

x: 2
arr\[x]: "tres"                   ; => ["one" "dos" "tres" 4]
str: "hello"
str\0: `x`
print str
; xello

shuffle

get given collection shuffled

Arguments

  • collection (:literal,:pathliteral,:block)

Returns

:block,:nothing

Examples

shuffle [1 2 3 4 5 6]         ; => [1 5 6 2 3 4 ]
arr: [2 5 9]
shuffle 'arr
print arr                     ; 5 9 2

size

get size/length of given collection

Arguments

  • collection (:null,:string,:binary,:dictionary,:object,:block,:range)

Returns

:integer,:floating

Examples

arr: ["one" "two" "three"]
print size arr                ; 3
dict: #[name: "John", surname: "Doe"]
print size dict               ; 2
str: "some text"
print size str                ; 9

print size "你好!"              ; 3

slice

get a slice of collection between given indices

Arguments

  • collection (:string,:literal,:pathliteral,:block)
  • from (:integer)
  • to (:integer)

Returns

:string,:block

Examples

slice "Hello" 0 3             ; => "Hell"
print slice 1..10 3 4         ; 4 5

sort

sort given block in ascending order

Arguments

  • collection (:literal,:pathliteral,:dictionary,:block)

Options

  • as (:literal): localized by ISO 639-1 language code
  • sensitive (:logical): case-sensitive sorting
  • descending (:logical): sort in descending order
  • values (:logical): sort dictionary by values
  • by (:string,:literal): sort array of dictionaries by given key

Returns

:block,:nothing

Examples

a: [3 1 6]
print sort a                  ; 1 3 6
print sort.descending a       ; 6 3 1
b: ["one" "two" "three"]
sort 'b
print b                       ; one three two

sorted?

check if given collection is already sorted

Arguments

  • collection (:block)

Options

  • descending (:logical): check for sorting in ascending order

Returns

:logical

Examples

sorted? [1 2 3 4 5]         ; => true
sorted? [4 3 2 1 5]         ; => false
sorted? [5 4 3 2 1]         ; => false
sorted?.descending [5 4 3 2 1]      ; => true
sorted?.descending [4 3 2 1 5]      ; => false
sorted?.descending [1 2 3 4 5]      ; => false

split

split collection to components

Arguments

  • collection (:string,:literal,:pathliteral,:block)

Options

  • words (:logical): split string by whitespace
  • lines (:logical): split string by lines
  • by (:string,:regex,:block): split using given separator
  • at (:integer): split collection at given position
  • every (:integer): split collection every n elements
  • path (:logical): split path components in string

Returns

:block,:nothing

Examples

split "hello"                 ; => [`h` `e` `l` `l` `o`]
split.words "hello world"     ; => ["hello" "world"]
split.every: 2 "helloworld"
; => ["he" "ll" "ow" "or" "ld"]
split.at: 4 "helloworld"
; => ["hell" "oworld"]
arr: 1..9
split.at:3 'arr
; => [ [1 2 3 4] [5 6 7 8 9] ]

squeeze

reduce adjacent elements in given collection

Arguments

  • collection (:string,:literal,:pathliteral,:block)

Returns

:string,:block,:nothing

Examples

print squeeze [1 1 2 3 4 2 3 4 4 5 5 6 7]
; 1 2 3 4 2 3 4 5 6 7
arr: [4 2 1 1 3 6 6]
squeeze 'arr            ; a: [4 2 1 3 6]
print squeeze "hello world"
; helo world

take

keep first of elements from given collection and return the remaining ones

Arguments

  • collection (:string,:literal,:pathliteral,:block,:range)
  • number (:integer)

Returns

:string,:block,:nothing

Examples

str: "some text"
take str 4              ; => some
take str neg 4          ; => text

take 1..3 2             ; => [1 2]
arr: @1..10
take 'arr 3                   
arr                     ; => arr: [1 2 3]
take [1 2 3] 3          ; => [1 2 3]
take [1 2 3] 4          ; => [1 2 3]

tally

find number of occurences of each value within given block and return as dictionary

Arguments

  • collection (:string,:block)

Returns

:dictionary

Examples

tally "helloWorld"
; => [h:1 e:1 l:3 o:2 W:1 r:1 d:1]
tally [1 2 4 1 3 5 6 2 6 3 5 7 2 4 2 4 5 6 2 1 1 1]
; => [1:5 2:5 4:3 3:2 5:3 6:3 7:1]

unique

get given collection without duplicates

Arguments

  • collection (:string,:literal,:pathliteral,:block)

Options

  • id (:logical): generate unique id using given prefix

Returns

:block,:nothing

Examples

arr: [1 2 4 1 3 2]
print unique arr              ; 1 2 4 3
arr: [1 2 4 1 3 2]
unique 'arr
print arr                     ; 1 2 4 3

values

get list of values for given collection

Arguments

  • dictionary (:dictionary,:object,:block,:range)

Returns

:block

Examples

user: #[
    name: "John"
    surname: "Doe"
]

values user
=> ["John" "Doe"]

zero?

check if given number or collection size is zero

Arguments

  • number (:null,:integer,:floating,:string,:dictionary,:block,:range)

Returns

:logical

Examples

zero? 5-5           ; => true
zero? 4             ; => false
zero? 1.0           ; => false
zero? 0.0           ; => true
items: [1 2 3]
zero? items         ; => false    

items: []
zero? items         ; => true
zero? ø             ; => true

Colors

blend

blend given colors and get result

Arguments

  • colorA (:literal,:pathliteral,:color)
  • colorB (:color)

Options

  • balance (:floating): use different mix of color (0.0-1.0, default:0.5)

Returns

:color

Examples

blend #red #CCCCCC                  ; => #E66666
blend .balance: 0.75 #red #CCCCCC   
; => #D99999

darken

darken color by given percentage (0.0-1.0)

Arguments

  • color (:literal,:pathliteral,:color)
  • percent (:floating)

Returns

:color

Examples

darken #red 0.2         ; => #CC0000
darken #red 0.5         ; => #7F0000

darken #9944CC 0.3      ; => #6B308F

desaturate

desaturate color by given percentage (0.0-1.0)

Arguments

  • color (:literal,:pathliteral,:color)
  • percent (:floating)

Returns

:color

Examples

desaturate #red 0.2         ; => #E61919
desaturate #red 0.5         ; => #BF4040

desaturate #9944CC 0.3      ; => #9558B8

grayscale

convert color to grayscale

Arguments

  • color (:literal,:pathliteral,:color)

Returns

:color

Examples

grayscale #red              ; => #808080
grayscale #green            ; => #404040

grayscale #FF44CC           ; => #A2A2A2

invert

get complement for given color

Arguments

  • color (:literal,:pathliteral,:color)

Returns

:color

Examples

print #orange               ; #FFA500

invert #orange              ; => #0059FF

lighten

lighten color by given percentage (0.0-1.0)

Arguments

  • color (:literal,:pathliteral,:color)
  • percent (:floating)

Returns

:color

Examples

print #lightblue            ; #ADD8E6

lighten #lightblue 0.2      ; => #D0FFFF
lighten #lightblue 0.5      ; => #FFFFFF

lighten #9944CC 0.3         ; => #C758FF

palette

create palette using given base color

Arguments

  • color (:color)

Options

  • triad (:logical): generate a triad palette
  • tetrad (:logical): generate a tetrad palette
  • split (:logical): generate a split complement palette
  • analogous (:logical): generate an analogous palette
  • monochrome (:logical): generate a monochromatic palette
  • random (:logical): generate random palette based on color triads
  • size (:integer): specify the size of the generated palette

Returns

:block

Examples

palette.triad #red      ; => [#FF0000 #00FF00 #0000FF]
palette.tetrad #red     ; => [#FF0000 #80FF00 #00FFFF #7F00FF]
palette.monochrome #red
; => [#FF0000 #D40000 #AA0000 #7F0000 #550000 #2A0000]

palette.monochrome.size:10 #red
; => [#FF0000 #E50000 #CC0000 #B20000 #990000 #7F0000 #660000 #4C0000 #330000 #190000]
palette.analogous #red
; => [#FF0099 #FF0066 #FF0033 #FF0000 #FF3300 #FF6600]

palette.analogous.size:10 #red
; => [#FF00FF #FF00CC #FF0099 #FF0066 #FF0033 #FF0000 #FF3300 #FF6600 #FF9900 #FFCC00]
palette.random #red
; => [#FF0000 #00EC00 #0000D2 #00F000 #0000FF #00FF00]

palette.random.size:10 #red
; => [#FF0000 #00FF00 #0000FF #00FE00 #F30000 #00FD00 #0000ED #EC0000 #00F800 #0000D8]

saturate

saturate color by given percentage (0.0-1.0)

Arguments

  • color (:literal,:pathliteral,:color)
  • percent (:floating)

Returns

:color

Examples

print #lightblue            ; #ADD8E6

saturate #lightblue 0.2     ; => #A7DBEC
saturate #lightblue 0.5     ; => #9FDFF4

saturate #9944CC 0.3        ; => #A030E0

spin

spin color around the hue wheel by given amount

Arguments

  • color (:literal,:pathliteral,:color)
  • amount (:integer)

Returns

:color

Examples

spin #red 90            ; => #80FF00
spin #red 180           ; => #00FFFF

spin #123456 45         ; => #231256
spin #123456 360        ; => #123456

Comparison

between?

check if given value is between the given values (inclusive)

Arguments

  • value (:any)
  • rangeFrom (:any)
  • rangeTo (:any)

Returns

:logical

Examples

between? 1 2 3      ; => false
between? 2 0 3      ; => true
between? 3 2 3      ; => true
between? 3 3 2      ; => true

1 <=> 2 3           ; => false
1 <=> 3 2           ; => false
2 <=> 0 3           ; => true
2 <=> 3 0           ; => true
3 <=> 2 3           ; => true

compare

compare given values and return -1, 0, or 1 based on the result

Arguments

  • valueA (:any)
  • valueB (:any)

Returns

:integer

Examples

compare 1 2           ; => -1
compare 3 3           ; => 0
compare 4 3           ; => 1

equal?

check if valueA = valueB (equality)

Arguments

  • valueA (:any)
  • valueB (:any)

Returns

:logical

Examples

equal? 5 2            ; => false
equal? 5 6-1          ; => true

print 3=3             ; true

greater?

check if valueA > valueB (greater than)

Arguments

  • valueA (:any)
  • valueB (:any)

Returns

:logical

Examples

greater? 5 2          ; => true
greater? 5 6-1        ; => false

print 3>2             ; true

greaterOrEqual?

check if valueA >= valueB (greater than or equal)

Arguments

  • valueA (:any)
  • valueB (:any)

Returns

:logical

Examples

greaterOrEqual? 5 2   ; => true
greaterOrEqual? 5 4-1 ; => false

print 2>=2            ; true

less?

check if valueA < valueB (less than)

Arguments

  • valueA (:any)
  • valueB (:any)

Returns

:logical

Examples

less? 5 2             ; => false
less? 5 6+1           ; => true

print 2<3             ; true

lessOrEqual?

check if valueA =< valueB (less than or equal)

Arguments

  • valueA (:any)
  • valueB (:any)

Returns

:logical

Examples

lessOrEqual? 5 2      ; => false
lessOrEqual? 5 6-1    ; => true

print 2=<3            ; true

notEqual?

check if valueA <> valueB (not equal)

Arguments

  • valueA (:any)
  • valueB (:any)

Returns

:logical

Examples

notEqual? 5 2         ; => true
notEqual? 5 6-1       ; => false

print 2<>3            ; true

same?

check if given values are exactly the same (identity)

Arguments

  • valueA (:any)
  • valueB (:any)

Returns

:logical

Examples

same? 1 2           ; => false
same? 3 3           ; => true
same? 3 3.0         ; => false

Converters

as

format given value as implied type

Arguments

  • value (:any)

Options

  • binary (:logical): format integer as binary
  • hex (:logical): format integer as hexadecimal
  • octal (:logical): format integer as octal
  • agnostic (:logical): convert words in block to literals, if not in context
  • data (:logical): parse input as Arturo data block
  • code (:logical): convert value to valid Arturo code
  • pretty (:logical): prettify generated code
  • unwrapped (:logical): omit external block notation

Returns

:any

Examples

print as.binary 123           ; 1111011
print as.octal 123            ; 173
print as.hex 123              ; 7b

from

get value from string, using given representation

Arguments

  • value (:string,:literal)

Options

  • binary (:logical): get integer from binary representation
  • hex (:logical): get integer from hexadecimal representation
  • octal (:logical): get integer from octal representation
  • opcode (:logical): get opcode by from opcode literal

Returns

:any

Examples

print from.binary "1011"        ; 11
print from.octal "1011"         ; 521
print from.hex "0xDEADBEEF"     ; 3735928559
from.opcode 'push1
=> 33

Core

alias

assign symbol to given function

Arguments

  • symbol (:string,:symbol,:symbolliteral,:block)
  • function (:string,:word,:literal)

Options

  • infix (:logical): use infix precedence

Returns

:nothing

Examples

addThem: function [x, y][
    x + y
]
alias --> 'addThem
    
print --> 2 3
; 5
multiplyThem: function [x, y][ x * y ]
alias.infix {<=>} 'multiplyThem

print 2 <=> 3
; 6

break

break out of current block or loop

Returns

:nothing

Examples

loop 1..5 'x [
    print ["x:" x]
    if x=3 -> break
    print "after check"
]
print "after loop"

; x: 1
; after check
; x: 2
; after check
; x: 3
; after loop

call

call function with given list of parameters

Arguments

  • function (:string,:word,:literal,:pathliteral,:function,:method)
  • params (:block)

Options

  • external (:string): path to external library
  • expect (:type): expect given return type

Returns

:any

Examples

multiply: function [x y][
    x * y
]

call 'multiply [3 5]          ; => 15
call $[x][x+2] [5]            ; 7
; Calling external (C code) functions

; compile with:
; clang -c -w mylib.c
; clang -shared -o libmylib.dylib mylib.o
; 
; NOTE:
; * If you're using GCC, just replace `clang` by `gcc`
; * If you're not on MacOS, replace your `dylib` by the right extension
;   normally they can be `.so` or `.dll` in other Operational Systems.

; #include <stdio.h>
;
; void sayHello(char* name){
;    printf("Hello %s!\n", name);
; }
;
; int doubleNum(int num){
;    return num * 2;
;}

; call an external function directly
call.external: "mylib" 'sayHello ["John"]

; map an external function to a native one
doubleNum: function [num][
    ensure -> integer? num
    call .external: "mylib"
        .expect:   :integer
        'doubleNum @[num]
]

loop 1..3 'x [
    print ["The double of" x "is" doubleNum x]
]

case

initiate a case block to check for different cases

Arguments

  • predicate (:null,:block)

Returns

:nothing

Examples

a: 2
case [a]
    when? [<2] -> print "a is less than 2"
    when? [=2] -> print "a is 2"
    else       -> print "a is greater than 2"

coalesce

if first value is null or false, return second value; otherwise return the first one

Arguments

  • value (:any)
  • alternative (:any)

Returns

:any

Examples

; Note that 'attr returns null if it has no attribute          
print coalesce attr "myAttr" "attr not found"
print (attr "myAttr") ?? "attr not found"

print (myData) ?? defaultData

continue

immediately continue with next iteration

Returns

:nothing

Examples

loop 1..5 'x [
    print ["x:" x]
    if x=3 -> continue
    print "after check"
]
print "after loop"

; x: 1 
; after check
; x: 2 
; after check
; x: 3 
; x: 4 
; after check
; x: 5 
; after check
; after loop

do

evaluate and execute given code

Arguments

  • code (:string,:block,:bytecode)

Options

  • times (:integer): repeat block execution given number of times

Returns

:any

Examples

do "print 123"                ; 123
do [
    x: 3
    print ["x =>" x]          ; x => 3
]
print do "https://raw.githubusercontent.com/arturo-lang/arturo/master/examples/projecteuler/euler1.art"
; 233168
do.times: 3 [
    print "Hello!"
]
; Hello!
; Hello!
; Hello!
; Importing modules

; let's say you have a 'module.art' with  this code:
;
; pi: 3.14
;
; hello: $[name :string] [
;    print ["Hello" name]
;]

do relative "module.art"

print pi
; 3.14

do [
    hello "John Doe"
    ; Hello John Doe
]
    
; Note: always use imported functions inside a 'do block
; since they need to be evaluated beforehand.
; On the other hand, simple variables can be used without
; issues, as 'pi in this example

dup

duplicate the top of the stack and convert non-returning call to a do-return call

Arguments

  • value (:any)

Returns

:any

Examples

; a label normally consumes its inputs
; and returns nothing

; using dup before a call, the non-returning function
; becomes a returning one

a: b: <= 3

print a         ; 3
print b         ; 3

else

perform action, if last condition was not true

Arguments

  • otherwise (:block,:bytecode)

Returns

:nothing

Examples

x: 2
z: 3

if? x>z [
    print "x was greater than z"
]
else [
    print "nope, x was not greater than z"
]

ensure

assert given condition is true, or exit

Arguments

  • condition (:block)

Options

  • that (:string): prints a custom message when ensure fails

Returns

:nothing

Examples

num: input "give me a positive number"

ensure [num > 0]

print "good, the number is positive indeed. let's continue..."
ensure.that: "Wrong calc" ->  0 = 1 + 1
; >> Assertion | "Wrong calc": [0 = 1 + 1]
;        error |

export

export given container children to current scope

Arguments

  • module (:dictionary,:object,:module)

Options

  • all (:logical): export everything, regardless of whether it's been marked as public (makes sense only for modules)

Returns

:nothing

Examples


function

create function with given arguments and body

Arguments

  • arguments (:literal,:block)
  • body (:block)

Options

  • import (:block): import/embed given list of symbols from current environment
  • export (:block): export given symbols to parent
  • memoize (:logical): store results of function calls
  • inline (:logical): execute function without scope

Returns

:function

Examples

f: function [x][ x + 2 ]
print f 10                ; 12

f: $[x][x+2]
print f 10                ; 12
multiply: function [x,y][
    x * y
]
print multiply 3 5        ; 15
; forcing typed parameters
addThem: function [
    x :integer
    y :integer :floating
][
    x + y
]
; adding complete documentation for user function
; using data comments within the body
addThem: function [
    x :integer :floating
    y :integer :floating
][
    ;; description: « takes two numbers and adds them up
    ;; options: [
    ;;      mul: :integer « also multiply by given number
    ;; ]
    ;; returns: :integer :floating
    ;; example: {
    ;;      addThem 10 20
    ;;      addThem.mult:3 10 20
    ;; }

    mult?: attr 'mult
    if? not? null? mult? ->
        return mult? * x + y
    else ->
        return x + y
]

info'addThem

; |--------------------------------------------------------------------------------
; |        addThem  :function                                          0x10EF0E528
; |--------------------------------------------------------------------------------
; |                 takes two numbers and adds them up
; |--------------------------------------------------------------------------------
; |          usage  addThem x :integer :floating
; |                         y :integer :floating
; |
; |        options  .mult :integer -> also multiply by given number
; |
; |        returns  :integer :floating
; |--------------------------------------------------------------------------------
publicF: function .export:['x] [z][
    print ["z =>" z]
    x: 5
]

publicF 10
; z => 10

print x
; 5
; memoization
fib: $[x].memoize[
    if? x<2 [1]
    else [(fib x-1) + (fib x-2)]
]

loop 1..25 [x][
    print ["Fibonacci of" x "=" fib x]
]

if

perform action, if given condition is not false or null

Arguments

  • condition (:any)
  • action (:block,:bytecode)

Returns

:nothing

Examples

x: 2

if x=2 -> print "yes, that's right!"
; yes, that's right!

if?

perform action, if given condition is not false or null and return condition result

Arguments

  • condition (:any)
  • action (:block)

Returns

:logical

Examples

x: 2

result: if? x=2 -> print "yes, that's right!"
; yes, that's right!

print result
; true
x: 2
z: 3

if? x>z [
    print "x was greater than z"
]
else [
    print "nope, x was not greater than z"
]

import

import given package

Arguments

  • package (:string,:literal,:block)

Options

  • version (:version): specify package version
  • min (:logical): get any version >= the specified one
  • branch (:string,:literal): use specific branch for repository url (default: main)
  • latest (:logical): always check for the latest version available
  • lean (:logical): return as a dictionary, instead of importing in main namespace
  • only (:block): import only selected symbols, if available
  • verbose (:logical): output extra information

Returns

:dictionary,:block,:nothing

Examples

import "dummy"                      ; import the package 'dummy'
    do ::
        print dummyFunc 10              ; and use it :)
    import.version:0.0.3 "dummy"        ; import a specific version

    import.min.version:0.0.3 "dummy"    ; import at least the give version;
                                        ; if there is a newer one, it will pull this one
    import.latest "dummy"               ; whether we already have the package or not
                                        ; always try to pull the latest version
    import "https://github.com/arturo-lang/dummy-package"
    ; we may also import user repositories directly

    import.branch:"main" "https://github.com/arturo-lang/dummy-package"
    ; even specifying the branch to pull
    import "somefile.art"               ; importing a local file is possible

    import "somepackage"                ; the same works if we have a folder that
                                        ; is actually structured like a package
    d: import.lean "dummy"              ; importing a package as a dictionary
                                        ; for better namespace isolation

    do [
        print d\dummyFunc 10            ; works fine :)
    ]

let

set symbol to given value

Arguments

  • symbol (:string,:word,:literal,:block)
  • value (:any)

Returns

:nothing

Examples

let 'x 10               ; x: 10
print x                 ; 10
; variable assignments
"a": 2                  ; a: 2

{_someValue}: 3
print var {_someValue}  ; 3
; multiple assignments
[a b]: [1 2]
print a                 ; 1
print b                 ; 2
; multiple assignment to single value
[a b c]: 5
print a                 ; 5
print b                 ; 5
print c                 ; 5
; unpacking slices and multiple assignment
[a [b] d c]: [1 2 3 4 5]
print a                 ; 1
print b                 ; [2 3]
print c                 ; 4
print d                 ; 5
; tuple unpacking
divmod: function [x,y][
    @[x/y x%y]
]
[d,m]: divmod 10 3      ; d: 3, m: 1

method

create type method with given arguments and body

Arguments

  • arguments (:literal,:block)
  • body (:block)

Options

  • distinct (:logical): shouldn't be treated as a magic method
  • public (:logical): make method public (relevant only in modules!)

Returns

:method

Examples

define :cat [
init: method [nick :string age :integer][
    this\nick: join.with: " " @["Mr." capitalize nick]
    this\age: age
]

; Function overloading
add: method [years :integer][
    this\age: age + this\age
]

meow: method [][
    print [~"|this\nick|:" "'meow!'"]
]
        ]

        a: to :cat [15 15]
        ; >> Assertion | [is? :string nick]
        ;        error |  

        snowflake: to :cat ["snowflake" 3]

        snowflake\meow
        ; Mr. Snowflake: 'meow!'

        ; use `do -> snowflake\meow` instead 
        ; when running the above code from a file

        add snowflake 3
        snowflake\age
        ; => 6

        snowflake\add 3
        print snowflake\age
        ; => 9

        ; use `do [snowflake\add 3]` instead
        ; when running the above code from a file

module

create new module with given contents

Arguments

  • contents (:dictionary,:block)

Options

  • with (:block): use given initialization parameters

Returns

:module

Examples


new

create new value by cloning given one

Arguments

  • value (:any)

Returns

:any

Examples

c: "Hello"
d: new c        ; make a copy of the older string

; changing one string in-place
; will change only the string in question

'd ++ "World"
print d                 ; HelloWorld
print c                 ; Hello

null

the NULL constant

Examples


return

return given value from current function

Arguments

  • value (:any)

Returns

:nothing

Examples

f: function [x][ 
    loop 1..x 'y [ 
        if y=5 [ return y*2 ] 
    ] 
    return x*2
]

print f 3         ; 6
print f 6         ; 10

set?

check if given variable is defined

Arguments

  • symbol (:string,:literal)

Returns

:logical

Examples

boom: 12
print set? 'boom          ; true

print set? 'zoom          ; false

switch

if condition is not false or null perform given action, otherwise perform alternative action

Arguments

  • condition (:any)
  • action (:block)
  • alternative (:block)

Returns

:any

Examples

x: 2

switch x=2 -> print "yes, that's right!"
           -> print "nope, that's not right!"
; yes, that's right!

unless

perform action, if given condition is false or null

Arguments

  • condition (:any)
  • action (:block,:bytecode)

Returns

:nothing

Examples

x: 2

unless x=1 -> print "yep, x is not 1!"
; yep, x is not 1!

unless?

perform action, if given condition is false or null and return condition result

Arguments

  • condition (:any)
  • action (:block,:bytecode)

Returns

:logical

Examples

x: 2

result: unless? x=1 -> print "yep, x is not 1!"
; yep, x is not 1!

print result
; true

z: 1

unless? x>z [
    print "yep, x was not greater than z"
]
else [
    print "x was greater than z"
]
; x was greater than z

unset

undefine given symbol, if already defined

Arguments

  • symbol (:string,:literal)

Returns

:nothing

Examples

a: 2
print a
; 2

unset 'a
print a
; will throw an error

unstack

pop top values from stack

Arguments

  • number (:integer)

Options

  • discard (:logical): do not return anything

Returns

:any

Examples

1 2 3
a: unstack 1        ; a: 3

1 2 3
b: unstack 2        ; b: [3 2]
1 2 3
unstack.discard 1   ; popped 3 from the stack

until

execute action until the given condition is not false or null

Arguments

  • action (:block,:bytecode)
  • condition (:block,:bytecode)

Returns

:nothing

Examples

i: 0 
until [
    print ["i =>" i] 
    i: i + 1
][i = 10]

; i => 0 
; i => 1 
; i => 2 
; i => 3 
; i => 4 
; i => 5 
; i => 6 
; i => 7 
; i => 8 
; i => 9

var

get symbol value by given name

Arguments

  • symbol (:string,:word,:literal,:pathliteral)

Returns

:any

Examples

a: 2
print var 'a            ; 2

f: function [x][x+2]
print f 10              ; 12

g: var 'f               
print g 10              ; 12

when?

check if a specific condition is fulfilled and, if so, execute given action

Arguments

  • condition (:block)
  • action (:block)

Returns

:logical

Examples

a: 2
case [a]
    when? [<2] -> print "a is less than 2"
    when? [=2] -> print "a is 2"
    else       -> print "a is greater than 2"

while

execute action while the given condition is is not false or null

Arguments

  • condition (:null,:block,:bytecode)
  • action (:block,:bytecode)

Returns

:nothing

Examples

i: 0 
while [i<10][
    print ["i =>" i] 
    i: i + 1
]

; i => 0 
; i => 1 
; i => 2 
; i => 3 
; i => 4 
; i => 5 
; i => 6 
; i => 7 
; i => 8 
; i => 9 

while ø [
    print "something"   ; infinitely
]

with

create closure-style block by embedding given words

Arguments

  • embed (:string,:word,:literal,:dictionary,:block)
  • body (:block)

Returns

:block

Examples

f: function [x][
    with [x][
        "the multiple of" x "is" 2*x
    ]
]

multiplier: f 10

print multiplier
; the multiple of 10 is 20

Crypto

crc

calculate the CRC32 polynomial of given string

Arguments

  • value (:string,:literal,:pathliteral)

Returns

:string,:nothing

Examples

print crc "The quick brown fox jumps over the lazy dog"
; 414FA339

decode

decode given value (default: base-64)

Arguments

  • value (:string,:literal,:pathliteral)

Options

  • url (:logical): decode URL based on RFC3986

Returns

:string,:nothing

Examples

print decode "TnVtcXVhbSBmdWdpZW5zIHJlc3BleGVyaXM="
; Numquam fugiens respexeris
print decode.url "http%3A%2F%2Ffoo+bar%2F"
; http://foo bar/

digest

get digest for given value (default: MD5)

Arguments

  • value (:string,:literal,:pathliteral)

Options

  • sha (:logical): use SHA1

Returns

:string,:nothing

Examples

print digest "Hello world"
; 3e25960a79dbc69b674cd4ec67a72c62
print digest.sha "Hello world"
; 7b502c3a1f48c8609ae212cdfb639dee39673f5e

encode

encode given value (default: base-64)

Arguments

  • value (:string,:literal,:pathliteral)

Options

  • url (:logical): encode URL based on RFC3986
  • spaces (:logical): also encode spaces
  • slashes (:logical): also encode slashes
  • from (:string): source character encoding (default: CP1252)
  • to (:string): target character encoding (default: UTF-8)

Returns

:string,:nothing

Examples

print encode "Numquam fugiens respexeris"
; TnVtcXVhbSBmdWdpZW5zIHJlc3BleGVyaXM=
print encode.url "http://foo bar/"
; http%3A%2F%2Ffoo+bar%2F

hash

get hash for given value

Arguments

  • value (:any)

Options

  • string (:logical): get as a string

Returns

:integer,:string

Examples

print hash "hello"      ; 613153351
print hash [1 2 3]      ; 645676735036410
print hash 123          ; 123

a: [1 2 3]
b: [1 2 3]
print (hash a)=(hash b) ; true

Databases

close

close given database

Arguments

  • database (:database)

Returns

:nothing

Examples

db: open "my.db"    ; opens an SQLite database named 'my.db'

print query db "SELECT * FROM users"

close db            ; and close it

open

opens a new database connection and returns database

Arguments

  • name (:string)

Options

  • sqlite (:logical): support for SQLite databases
  • mysql (:logical): support for MySQL databases

Returns

:database

Examples

db: open "my.db"    ; opens an SQLite database named 'my.db'

query

execute command or block of commands in given database and get returned rows

Arguments

  • database (:database)
  • commands (:string,:block)

Options

  • id (:logical): return last INSERT id
  • with (:block): use arguments for parametrized statement

Returns

:null,:integer,:block

Examples

db: open "my.db"    ; opens an SQLite database named 'my.db'

; perform a simple query
print query db "SELECT * FROM users"

; perform an INSERT query and get back the record's ID
username: "johndoe"
lastInsertId: query.id db ~{!sql INSERT INTO users (name) VALUES ('|username|')}

; perform a safe query with given parameters
print query db .with: ["johndoe"] {!sql SELECT * FROM users WHERE name = ?}

store

create or load a persistent store on disk

Arguments

  • path (:string,:literal)

Options

  • deferred (:logical): save to disk only on program termination
  • global (:logical): save as global store
  • native (:logical): force native/Arturo format
  • json (:logical): force Json format
  • db (:logical): force database/SQlite format

Returns

:range

Examples

; create a new store with the name `mystore`
; it will be automatically live-stored in a file in the same folder
; using the native Arturo format
data: store "mystore"

; store some data
data\name: "John"
data\surname: "Doe"
data\age: 36

; and let's retrieve our data
data
; => [name:"John" surname:"Doe" age:36]
; create a new "global" configuration store
; that will be saved automatically in ~/.arturo/stores
globalStore: store.global "configuration"

; we are now ready to add or retrieve some persistent data!
; create a new JSON store with the name `mystore`
; it will be automatically live-stored in a file in the same folder
; with the name `mystore.json`
data: store.json "mystore"

; store some data
da\people: []

; data can be as complicated as in any normal dictionary
da\people: da\people ++ #[name: "John" surname: "Doe"]

; check some specific store value
da\people\0\name
; => "John"
; create a new deferred store with the name `mystore`
; it will be automatically saved in a file in the same folder
; using the native Arturo format
defStore: store.deferred "mystore"

; let's save some data
defStore\name: "John"
defStore\surname: "Doe"

; and print it
print defStore
; [name:John surname:Doe]

; in this case, all data is available at any given moment
; but will not be saved to disk for each and every operation;
; instead, it will be saved in its totality just before
; the program terminates!

Dates

after

get date after given one using interval

Arguments

  • date (:literal,:pathliteral,:date)

Options

  • nanoseconds (:integer): add given number of nanoseconds
  • milliseconds (:integer): add given number of milliseconds
  • seconds (:integer): add given number of seconds
  • minutes (:integer): add given number of minutes
  • hours (:integer): add given number of hours
  • days (:integer): add given number of days
  • weeks (:integer): add given number of weeks
  • months (:integer): add given number of months
  • years (:integer): add given number of years

Returns

:date

Examples

print now
; 2021-03-22T11:25:30+01:00

print after.weeks:2 now
; 2021-04-05T11:25:42+02:00

before

get date before given one using interval

Arguments

  • date (:literal,:pathliteral,:date)

Options

  • nanoseconds (:integer): subtract given number of nanoseconds
  • milliseconds (:integer): subtract given number of milliseconds
  • seconds (:integer): subtract given number of seconds
  • minutes (:integer): subtract given number of minutes
  • hours (:integer): subtract given number of hours
  • days (:integer): subtract given number of days
  • weeks (:integer): subtract given number of weeks
  • months (:integer): subtract given number of months
  • years (:integer): subtract given number of years

Returns

:date

Examples

print now
; 2021-03-22T11:27:00+01:00

print before.weeks:2 now
; 2021-03-08T11:27:14+01:00

print before.years:1 now
; 2020-03-22T11:27:23+01:00

friday?

check if given date is a Friday

Arguments

  • date (:date)

Returns

:logical

Examples

print friday? now       ; false

future?

check if given date is in the future

Arguments

  • date (:date)

Returns

:logical

Examples

futureDate: after.weeks:2 now

print future? now           ; false
print future? futureDate    ; true

leap?

check if given year is a leap year

Arguments

  • year (:integer,:date)

Returns

:logical

Examples

print leap? now     ; false

print map 2019..2021 => leap? 
; false true false

monday?

check if given date is a Monday

Arguments

  • date (:date)

Returns

:logical

Examples

print sunday? now       ; false

now

get date/time now

Returns

:date

Examples

print now           ; 2020-10-23T14:16:13+02:00

time: now
inspect time

; [ :date
;       hour        : 14 :integer
;       minute      : 16 :integer
;       second      : 55 :integer
;       nanosecond  : 82373000 :integer
;       day         : 23 :integer
;       Day         : Friday :string
;       month       : 10 :integer
;       Month       : October :string
;       year        : 2020 :integer
;       utc         : -7200 :integer
; ]

print now\year      ; 2020

past?

check if given date is in the past

Arguments

  • date (:date)

Returns

:logical

Examples

pastDate: before.weeks:2 now
futureDate: after.weeks:1 now

print past? futureDate      ; false
print past? pastDate        ; true

print past? now             ; true ("now" has already become past...)

saturday?

check if given date is a Saturday

Arguments

  • date (:date)

Returns

:logical

Examples

print saturday? now     ; false

sunday?

check if given date is a Sunday

Arguments

  • date (:date)

Returns

:logical

Examples

print sunday? now       ; false

thursday?

check if given date is a Thursday

Arguments

  • date (:date)

Returns

:logical

Examples

print thursday? now     ; false

today?

check if given date is today

Arguments

  • date (:date)

Returns

:logical

Examples

print today? now                    ; true

print today? after.hours: 24 now    ; false

tuesday?

check if given date is a Tuesday

Arguments

  • date (:date)

Returns

:logical

Examples

print tuesday? now      ; true

wednesday?

check if given date is a Wednesday

Arguments

  • date (:date)

Returns

:logical

Examples

print wednesday? now    ; false

Exceptions

arithmeticError

an arithmetic error

Examples


assertionError

an assertion error

Examples


conversionError

a conversion error

Examples


indexError

an index error

Examples


libraryError

a library error

Examples


nameError

a name error

Examples


packageError

a package error

Examples


runtimeError

a generic runtime error

Examples


syntaxError

a syntax error

Examples


systemError

a system error

Examples


throw

throw an error with given message

Arguments

  • message (:string,:errorkind)

Options

  • as (:errorkind): consider the error as one of given subtype

Returns

:nothing

Examples

err: try -> throw "Page not found"
err\kind
; => Generic Error
err\message
; => Page not found

; or you can alternatively use custom errorKind

pageNotFound: to :errorKind "404: Page not Found"

err: try -> throw.as: pageNotFound "Seems that the page does not exist"
err\kind
; => 404: Page not Found
err\message
; => Seems that the page does not exist

; Or even use the :errorKind's label as the message itself

err: try -> throw pageNotFound
err\kind
; => 404: Page not Found
err\message
; => 404: Page not Found

throws?

perform action, and return true if errors were thrown

Arguments

  • action (:block,:bytecode)

Returns

:logical

Examples

throws? [
    1 + 2
] 
; => false

throws? -> 1/0
; => true

try

perform action and catch possible errors

Arguments

  • action (:block,:bytecode)

Options

  • verbose (:logical): print all error messages as usual

Returns

:null,:error

Examples

err: try [
    ; let's try something dangerous
    print 10 / 0
]

type err
; => :error

; Tips: mixing errors and returned values

f: $[][ throw "some error" ]
g: $[][ return "hi" ]

(genericError = err: <= try -> val: f)?
    -> print err
    -> print val
; => Generic Error: some error

(genericError = err: <= try -> val: g)?
    -> print err
    -> print val
; => hi

typeError

a type error

Examples


uiError

a UI error

Examples


valueError

a value error

Examples


vmError

a VM error

Examples


Files

copy

copy file at path to given destination

Arguments

  • file (:string)
  • destination (:string)

Options

  • directory (:logical): path is a directory

Returns

:nothing

Examples

copy "testscript.art" normalize.tilde "~/Desktop/testscript.art"
; copied file
copy "testfolder" normalize.tilde "~/Desktop/testfolder"
; copied whole folder

delete

delete file at given path

Arguments

  • file (:string)

Options

  • directory (:logical): path is a directory

Returns

:nothing

Examples

delete "testscript.art"
; file deleted

directory?

check if given path exists and corresponds to a directory

Arguments

  • path (:string)

Returns

:logical

Examples

if directory? "src" [ 
    print "directory exists!" 
]

exists?

check if file/directory at given path exists

Arguments

  • path (:string)

Returns

:logical

Examples

if exists? "somefile.txt" [ 
    print "path exists!" 
]

file?

check if given path exists and corresponds to a file

Arguments

  • path (:string)

Returns

:logical

Examples

if file? "somefile.txt" [ 
    print "file exists!" 
]

hidden?

check if file/folder at given path is hidden

Arguments

  • file (:string)

Returns

:logical

Examples

hidden? "README.md"     ; => false
hidden? ".git"          ; => true

move

move file at path to given destination

Arguments

  • file (:string)
  • destination (:string)

Options

  • directory (:logical): path is a directory

Returns

:nothing

Examples

move "testscript.art" normalize.tilde "~/Desktop/testscript.art"
; moved file
move "testfolder" normalize.tilde "~/Desktop/testfolder"
; moved whole folder

permissions

check permissions of given file

Arguments

  • file (:string)

Options

  • set (:dictionary): set using given file permissions

Returns

:null,:dictionary

Examples

inspect permissions "bin/arturo"
; [ :dictionary
;     user    :	[ :dictionary
;         read     :		true :boolean
;         write    :		true :boolean
;         execute  :		true :boolean
;     ]
;     group   :	[ :dictionary
;         read     :		true :boolean
;         write    :		false :boolean
;         execute  :		true :boolean
;     ]
;     others  :	[ :dictionary
;         read     :		true :boolean
;         write    :		false :boolean
;         execute  :		true :boolean
;     ]
; ]
permissions.set:#[others:#[write:true]] "bin/arturo"
; gave write permission to 'others'

read

read file from given path

Arguments

  • file (:string)

Options

  • lines (:logical): read file lines into block
  • json (:logical): read Json into value
  • csv (:logical): read CSV file into a block of rows
  • delimiter (:char): read CSV file with a specific delimiter
  • withHeaders (:logical): read CSV headers
  • html (:logical): read HTML into node dictionary
  • xml (:logical): read XML into node dictionary
  • markdown (:logical): read Markdown and convert to HTML
  • toml (:logical): read TOML into value
  • bytecode (:logical): read file as Arturo bytecode
  • binary (:logical): read as binary
  • file (:logical): read as file (throws an error if not valid)

Returns

:string,:binary,:block

Examples

; reading a simple local file
str: read "somefile.txt"
; also works with remote urls
page: read "http://www.somewebsite.com/page.html"
; we can also "read" JSON data as an object
data: read.json "mydata.json"
; or even convert Markdown to HTML on-the-fly
html: read.markdown "## Hello"     ; "<h2>Hello</h2>"

rename

rename file at path using given new path name

Arguments

  • file (:string)
  • name (:string)

Options

  • directory (:logical): path is a directory

Returns

:nothing

Examples

rename "README.md" "READIT.md"
; file renamed

symlink

create symbolic link of file to given destination

Arguments

  • file (:string)
  • destination (:string)

Options

  • hard (:logical): create a hard link

Returns

:nothing

Examples

symlink relative "arturo/README.md" 
        "/Users/drkameleon/Desktop/gotoREADME.md"
; creates a symbolic link to our readme file
; in our desktop
symlink.hard relative "arturo/README.md" 
        "/Users/drkameleon/Desktop/gotoREADME.md"
; hard-links (effectively copies) our readme file
; to our desktop

symlink?

check if given path exists and corresponds to a symlink

Arguments

  • path (:string)

Returns

:logical

Examples

if symlink? "somefile" [ 
    print "symlink exists!" 
]

timestamp

get file timestamps

Arguments

  • file (:string)

Returns

:null,:dictionary

Examples

timestamp "README.md"
; =>  [created:2022-09-21T12:35:04+02:00 accessed:2022-09-21T12:35:04+02:00 modified:2022-09-21T12:35:04+02:00]

timestamp "some-file-that-does-not-exist.txt"
; => null

unzip

unzip given archive to destination

Arguments

  • destination (:string)
  • original (:string)

Returns

:nothing

Examples

unzip "folder" "archive.zip"

volume

get file size for given path

Arguments

  • file (:string)

Returns

:quantity

Examples

volume "README.md"
; => 13704B 
; (size in bytes)

write

write content to file at given path

Arguments

  • file (:null,:string)
  • content (:any)

Options

  • append (:logical): append to given file
  • directory (:logical): create directory at path
  • json (:logical): write value as Json
  • compact (:logical): produce compact, non-prettified Json code
  • binary (:logical): write as binary

Returns

:nothing

Examples

; write some string data to given file path
write "somefile.txt" "Hello world!"
; we can also write any type of data as JSON
write.json "data.json" myData
; append to an existing file
write.append "somefile.txt" "Yes, Hello again!"

zip

zip given files to file at destination

Arguments

  • destination (:string)
  • files (:block)

Returns

:nothing

Examples

zip "dest.zip" ["file1.txt" "img.png"]

Io

clear

clear terminal

Returns

:nothing

Examples

clear             ; (clears the screen)

color

get colored version of given string

Arguments

  • color (:color)
  • string (:string)

Options

  • bold (:logical): bold font
  • underline (:logical): show underlined
  • keep (:logical): don't reset color at string end

Returns

:string

Examples

print color #green "Hello!"                ; Hello! (in green)
print color #red.bold "Some text"          ; Some text (in red/bold)

cursor

turn cursor visibility on/off

Arguments

  • visible (:logical)

Returns

:nothing

Examples

cursor false    ; (hides the cursor)
cursor true     ; (shows the cursor)

goto

move cursor to given coordinates

Arguments

  • x (:null,:integer)
  • y (:null,:integer)

Returns

:nothing

Examples

goto 10 15      ; (move cursor to column 10, line 15)
goto 10 ø       ; (move cursor to column 10, same line)

input

print prompt and get user input. If the prompt is ø, get a single character

Arguments

  • prompt (:null,:string)

Options

  • repl (:logical): get input as if in a REPL
  • history (:string): set path for saving history
  • complete (:block): use given array for auto-completions
  • hint (:dictionary): use given dictionary for typing hints

Returns

:char,:string

Examples

name: input "What is your name? "
; (user enters his name: Bob)

print ["Hello" name "!"]
; Hello Bob!
; creating a simple REPL
while [true][ 
    inp: input.repl 
              .history: "myhistory.txt"
              .complete:["Hello there", "Hello world!"] 
              .hint:#[he: "perhaps you want to say hello?"] 
              "## "

    print ["got:" inp] 
]
; will show a REPL-like interface, with arrow navigation enabled
; show previous entries with arrow-up, store entries in
; a recoverable file and also use autocompletions and hints
; based on give reference
character: input ø
; (User types a key, for example "A")
print character
; A

print

print given value to screen with newline

Arguments

  • value (:any)

Options

  • lines (:logical): print each value in block in a new line

Returns

:nothing

Examples

print "Hello world!"          ; Hello world!

prints

print given value to screen

Arguments

  • value (:any)

Returns

:nothing

Examples

prints "Hello "
prints "world"
print "!"             

; Hello world!

terminal

get info about terminal

Returns

:dictionary

Examples

print terminal      ; [width:107 height:34]
terminal\width      ; => 107

Iterators

arrange

sort items in collection using given action, in ascending order

Arguments

  • collection (:integer,:string,:literal,:dictionary,:object,:inline,:block,:range)
  • params (:null,:literal,:block)
  • condition (:block,:bytecode)

Options

  • with (:literal): use given index
  • descending (:logical): sort in descending order

Returns

:block,:nothing

Examples

arrange ["the" "brown" "fox" "jumped" "over" "the" "lazy" "dog"] => size
; => ["the" "fox" "the" "dog" "over" "lazy" "brown" "jumped"]
arrange.descending 1..10 'x -> size factors.prime x
; => [8 4 6 9 10 2 3 5 7 1]

chunk

chunk together consecutive items in collection that abide by given predicate

Arguments

  • collection (:integer,:string,:literal,:dictionary,:object,:inline,:block,:range)
  • params (:null,:literal,:block)
  • condition (:block,:bytecode)

Options

  • with (:literal): use given index
  • value (:logical): also include condition values

Returns

:block,:nothing

Examples

chunk [1 1 2 2 3 22 3 5 5 7 9 2 5] => even?
; => [[1 1] [2 2] [3] [22] [3 5 5 7 9] [2] [5]]
chunk.value [1 1 2 2 3 22 3 5 5 7 9 2 5] 'x [ odd? x ]
; => [[true [1 1]] [false [2 2]] [true [3]] [false [22]] [true [3 5 5 7 9]] [false [2]] [true [5]]]
chunk.with:'i ["one" "two" "three" "four" "five" "six"] [] -> i < 4
; => [["one" "two" "three" "four"] ["five" "six"]]
chunk [1 7 5 4 3 6 8 2] [x y]-> even? x+y
; => [[1 7] [5 4 3 6] [8 2]]

cluster

group together items in collection that abide by given predicate

Arguments

  • collection (:integer,:string,:literal,:dictionary,:object,:inline,:block,:range)
  • params (:null,:literal,:block)
  • condition (:block,:bytecode)

Options

  • with (:literal): use given index
  • value (:logical): also include condition values

Returns

:block,:nothing

Examples

cluster 1..10 => odd?
; => [[1 3 5 7 9] [2 4 6 8 10]]

cluster 1..10 'x -> prime? x
; => [[1 4 6 8 9 10] [2 3 5 7]]
cluster 1..10 [x y] -> 10 < x+y
; => [[1 2 3 4] [5 6 7 8 9 10]]
cluster.value 1..10 'x -> prime? x
; => [[false [1 4 6 8 9 10]] [true [2 3 5 7]]]
#.raw flatten.once cluster.value 1..10 'x [
    (prime? x)? -> "prime"
                -> "composite"
]
; => [composite:[1 4 6 8 9 10] prime:[2 3 5 7]]
cluster.with: 'i ["one" "two" "three" "four" "five" "six"] [] -> even? i
; => [["one" "three" "five"] ["two" "four" "six"]]

collect

collect items from given collection condition while is true

Arguments

  • collection (:integer,:string,:literal,:dictionary,:object,:inline,:block,:range)
  • params (:null,:literal,:block)
  • condition (:block,:bytecode)

Options

  • with (:literal): use given index
  • after (:logical): start collecting after given condition becomes true

Returns

:block,:nothing

Examples

collect [1 3 5 4 6 7] => odd?
; => [1 3 5]

collect [1 2 3 4 3 2 1 2 3] 'x -> x < 4
; => [1 2 3]
collect.after [4 6 3 5 2 0 1] => odd?
; => [3 5 2 0 1]

collect.after 1..10 'x -> x > 4
; => [5 6 7 8 9 10]

enumerate

calculate the number of given collection's items that satisfy condition

Arguments

  • collection (:integer,:string,:dictionary,:object,:inline,:block,:range)
  • params (:null,:literal,:block)
  • condition (:block,:bytecode)

Options

  • with (:literal): use given index

Returns

:integer

Examples

enumerate 1..10000000 => odd? 
; => 5000000
enumerate.with:'i ["one" "two" "three" "four"] 'x -> i < 3
; => 3

every?

check if every item in collection satisfies given condition

Arguments

  • collection (:integer,:string,:dictionary,:object,:inline,:block,:range)
  • params (:null,:literal,:block)
  • condition (:block,:bytecode)

Options

  • with (:literal): use given index

Returns

:logical

Examples

if every? [2 4 6 8] 'x [even? x]
    -> print "every number is an even integer"
; every number is an even integer
print every? 1..10 'x -> x < 11
; true
print every? 1..10 [x y]-> 20 > x+y
; true
print every? [2 3 5 7 11 14] 'x [prime? x]
; false
print every?.with:'i ["one" "two" "three"] 'x -> 4 > (size x)-i
; true

filter

get collection's items by filtering those that do not fulfil given condition

Arguments

  • collection (:integer,:string,:literal,:dictionary,:object,:inline,:block,:range)
  • params (:null,:literal,:block)
  • condition (:block,:bytecode)

Options

  • with (:literal): use given index
  • first (:logical,:integer): only filter first element/s
  • last (:logical,:integer): only filter last element/s

Returns

:block,:nothing,:any

Examples

print filter 1..10 [x][
    even? x
]
; 1 3 5 7 9
arr: 1..10
filter 'arr 'x -> even? x
print arr
; 1 3 5 7 9
filter [1 1 2 3 5 8 13 21] [x y]-> odd? x+y
; => [1 1 13 21]
filter.with:'i ["zero" "one" "two" "three" "four" "five"] []-> even? i
; => ["one" "three" "five"]
filter.first 1..10 => odd?
=> [2 3 4 5 6 7 8 9 10]

filter.first:3 1..10 => odd?
=> [2 4 6 7 8 9 10]
filter.last 1..10 => odd?
=> [1 2 3 4 5 6 7 8 10]

filter.last:3 1..10 => odd?
=> [1 2 3 4 6 8 10]

fold

left-fold given collection returning accumulator

Arguments

  • collection (:integer,:string,:dictionary,:object,:inline,:block,:range)
  • params (:null,:block)
  • action (:block,:bytecode)

Options

  • with (:literal): use given index
  • seed (:any): use specific seed value
  • right (:logical): perform right folding

Returns

:null,:block,:nothing

Examples

fold 1..10 [x,y]-> x + y
; => 55 (1+2+3+4..)

fold 1..10 .seed:1 [x,y][ x * y ]
; => 3628800 (10!)
fold 1..3 [x,y]-> x - y
; => -6

fold.right 1..3 [x,y]-> x - y
; => 2
fold.seed:"0" to [:string] 1..5 [x,y] ->
    "(" ++ x ++ "+" ++ y ++ ")"
; => (((((0+1)+2)+3)+4)+5)

fold.right.seed:"0" to [:string] 1..5 [x,y] ->
    "(" ++ x ++ "+" ++ y ++ ")"
; => (1+(2+(3+(4+(5+0)))))
fold 1..10 [x y z] [
    print [x y z]
    x + z - y
]
; 0 1 2
; 1 3 4
; 2 5 6
; 3 7 8
; 4 9 10
; => 5
fold.with:'i 1..5 [x y][
    print [i x y]
    i * x+y
]
; 0 0 1
; 1 0 2
; 2 2 3
; 3 10 4
; 4 42 5
; => 188

gather

group items in collection by block result and return as dictionary

Arguments

  • collection (:integer,:string,:literal,:dictionary,:object,:inline,:block,:range)
  • params (:null,:literal,:block)
  • condition (:block,:bytecode)

Options

  • with (:literal): use given index

Returns

:dictionary,:nothing

Examples

print gather [1 2 3 4 5 6] 'x [
    x % 2
]
; [1:[1 3 5] 0:[2 4 6]]

print gather ["New York" "Washington" "Minnesota" "Montana" "New Hampshire" "New Mexico"] 'x [
    size x
]
; [8:[New York] 10:[Washington New Mexico] 9:[Minnesota] 7:[Montana] 13:[New Hampshire]]
gather.with:'i ["one" "two" "three" "four"] 'x -> i%2
; [0:[one three] 1:[two four]]

loop

loop through collection, using given iterator and block

Arguments

  • collection (:integer,:string,:dictionary,:object,:inline,:block,:range)
  • params (:null,:literal,:block)
  • action (:block,:bytecode)

Options

  • with (:literal): use given index
  • forever (:logical): cycle through collection infinitely

Returns

:nothing

Examples

loop [1 2 3] 'x [
    print x
]
; 1
; 2
; 3
loop 1..3 [x][
    print ["x =>" x]
]
; x => 1
; x => 2
; x => 3
loop [A a B b C c] [x y][
    print [x "=>" y]
]
; A => a
; B => b
; C => c
user: #[
    name: "John"
    surname: "Doe"
]

loop user [k v][
    print [k "=>" v]
]
; name => John
; surname => Doe
loop.with:'i ["zero" "one" "two"] 'x [
    print ["item at:" i "=>" x]
]
; 0 => zero
; 1 => one
; 2 => two
loop.forever [1 2 3] => print
; 1 2 3 1 2 3 1 2 3 ...

map

map collection's items by applying given action

Arguments

  • collection (:integer,:string,:literal,:dictionary,:object,:inline,:block,:range)
  • params (:null,:literal,:block)
  • condition (:block,:bytecode)

Options

  • with (:literal): use given index

Returns

:block,:nothing

Examples

print map 1..5 [x][
    2*x
]
; 2 4 6 8 10
arr: 1..5
map 'arr 'x -> 2*x
print arr
; 2 4 6 8 10
map 1..6 [x y][
    print ["mapping" x "and" y "->" x+y]
    x+y
]
; mapping 1 and 2 -> 3
; mapping 3 and 4 -> 7
; mapping 5 and 6 -> 11
; => [3 7 11]
map.with:'i ["one" "two" "three" "four"] 'x [
    (even? i)? -> upper x -> x
]
; => ["ONE" "two" "THREE" "four"]

maximum

get maximum item from collection based on given predicate

Arguments

  • collection (:integer,:string,:literal,:dictionary,:object,:inline,:block,:range)
  • params (:null,:literal,:block)
  • condition (:block,:bytecode)

Options

  • with (:literal): use given index
  • value (:logical): also include predicate values

Returns

:block,:nothing

Examples

maximum 1..10 'x -> size factors.prime x
; => 8
; 8 has the maximum number of 
; prime factors: 2, 2, 2 (3)
maximum.value 1..10 'x -> size factors.prime x
; => [8 3]

minimum

get minimum item from collection based on given predicate

Arguments

  • collection (:integer,:string,:literal,:dictionary,:object,:inline,:block,:range)
  • params (:null,:literal,:block)
  • condition (:block,:bytecode)

Options

  • with (:literal): use given index
  • value (:logical): also include predicate values

Returns

:block,:nothing

Examples

minimum [4 17 20] 'x -> size factors.prime x
; => 17
; 17 has the minimum number of 
; prime factors: 17 (1)
minimum.value [4 17 20] 'x -> size factors.prime x
; => [17 1]

select

get collection's items that fulfil given condition

Arguments

  • collection (:integer,:string,:literal,:dictionary,:object,:inline,:block,:range)
  • params (:null,:literal,:block)
  • condition (:block,:bytecode)

Options

  • with (:literal): use given index
  • first (:logical,:integer): only return first element/s
  • last (:logical,:integer): only return last element/s
  • n (:integer): only return n-th element

Returns

:block,:nothing,:any

Examples

print select 1..10 [x][
    even? x
]
; 2 4 6 8 10
arr: 1..10
select 'arr 'x -> even? x
print arr
; 2 4 6 8 10
select [1 1 2 3 5 8 13 21] [x y]-> odd? x+y
; => [2 3 5 8]
select.with:'i ["zero" "one" "two" "three" "four" "five"] []-> even? i
; => ["zero" "two" "four"]
select.first 1..10 => odd?
=> [1]

select.first:3 1..10 => odd?
=> [1 3 5]
select.last 1..10 => odd?
=> [9]

select.last:3 1..10 => odd?
=> [5 7 9]

some?

check if any of collection's items satisfy given condition

Arguments

  • collection (:integer,:string,:dictionary,:object,:inline,:block,:range)
  • params (:null,:literal,:block)
  • condition (:block,:bytecode)

Options

  • with (:literal): use given index

Returns

:logical

Examples

if some? [1 3 5 6 7] 'x [even? x]
    -> print "at least one number is an even integer"
; at least one number is an even integer
print some? 1..10 'x -> x > 9
; true
print some? [4 6 8 10] 'x [prime? x]
; false
print some? 1..10 [x y]-> 15 < x+y
; true
print some? [2 4 6 9] 'x [prime? x]
; true
print some?.with:'i ["three" "two" "one" "four" "five"] 'x -> i >= size x
; true

Logic

all?

check if all values in given block are true

Arguments

  • conditions (:block)

Returns

:logical

Examples

if all? @[2>1 "DONE"=upper "done" true] 
    -> print "yes, all are true"
; yes, all are true
print all? @[true false true true]
; false
all? []
; => true

and?

return the logical AND for the given values

Arguments

  • valueA (:logical,:block)
  • valueB (:logical,:block)

Returns

:logical

Examples

x: 2
y: 5

if and? x=2 y>5 [
    print "yep, that's correct!"]
]

; yep, that's correct!

any?

check if any of the values in given block is true

Arguments

  • conditions (:block)

Returns

:logical

Examples

if any? @[false 3=4 2>1] 
    -> print "yes, one (or more) of the values is true"
; yes, one (or more) of the values is true
print any? @[false false false]
; false

false

the FALSE logical constant

Examples


false?

returns true if given value is false; otherwise, it returns false

Arguments

  • value (:any)

Returns

:logical

Examples

print false? 1 = 2          ; true
print false? 1 <> 2         ; false
print false? odd? 2         ; true

print false? [1 2 3]        ; false

maybe

the MAYBE logical constant

Examples


nand?

return the logical NAND for the given values

Arguments

  • valueA (:logical,:block)
  • valueB (:logical,:block)

Returns

:logical

Examples

x: 2
y: 3

if? nand? x=2 y=3 [
    print "yep, that's correct!"]
]
else [
    print "nope, that's not correct"
]

; nope, that's not correct

nor?

return the logical NOR for the given values

Arguments

  • valueA (:logical,:block)
  • valueB (:logical,:block)

Returns

:logical

Examples

x: 2
y: 3

if? nor? x>2 y=3 [
    print "yep, that's correct!"]
]
else [
    print "nope, that's not correct"
]

; nope, that's not correct

not?

return the logical complement of the given value

Arguments

  • value (:logical,:block)

Returns

:logical

Examples

ready: false
if not? ready [
    print "we're still not ready!"
]

; we're still not ready!

or?

return the logical OR for the given values

Arguments

  • valueA (:logical,:block)
  • valueB (:logical,:block)

Returns

:logical

Examples

x: 2
y: 4

if or? x=2 y>5 [
    print "yep, that's correct!"]
]

; yep, that's correct!

true

the TRUE logical constant

Examples


true?

returns true if given value is true; otherwise, it returns false

Arguments

  • value (:any)

Returns

:logical

Examples

print true? 1 = 2           ; false
print true? 1 <> 2          ; true
print true? even? 2         ; true

print true? [1 2 3]         ; false

xnor?

return the logical XNOR for the given values

Arguments

  • valueA (:logical,:block)
  • valueB (:logical,:block)

Returns

:logical

Examples

x: 2
y: 3

if? xnor? x=2 y=3 [
    print "yep, that's correct!"]
]
else [
    print "nope, that's not correct"
]

; yep, that's not correct

xor?

return the logical XOR for the given values

Arguments

  • valueA (:logical,:block)
  • valueB (:logical,:block)

Returns

:logical

Examples

x: 2
y: 3

if? xor? x=2 y=3 [
    print "yep, that's correct!"]
]
else [
    print "nope, that's not correct"
]

; nope, that's not correct

Net

browse

open given URL with default browser

Arguments

  • url (:string)

Returns

:nothing

Examples

browse "https://arturo-lang.io"
; opens Arturo's official website in a new browser window

download

download file from url to disk

Arguments

  • url (:string)

Options

  • as (:string): set target file

Returns

:nothing

Examples

download "https://github.com/arturo-lang/arturo/raw/master/logo.png"
; (downloads file as "logo.png")
download.as:"arturoLogo.png"
            "https://github.com/arturo-lang/arturo/raw/master/logo.png"

; (downloads file with a different name)

mail

send mail using given title and message to selected recipient

Arguments

  • recipient (:string)
  • title (:string)
  • message (:string)

Options

  • using (:dictionary): use given configuration

Returns

:nothing

Examples

mail .using: #[
            server: "mymailserver.com"
            username: "myusername"
            password: "mypass123"
        ]
        "[email protected]" "Hello from Arturo" "Arturo rocks!"

request

perform HTTP request to url with given data and get response

Arguments

  • url (:string)
  • data (:null,:dictionary)

Options

  • get (:logical): perform a GET request (default)
  • post (:logical): perform a POST request
  • patch (:logical): perform a PATCH request
  • put (:logical): perform a PUT request
  • delete (:logical): perform a DELETE request
  • json (:logical): send data as Json
  • headers (:dictionary): send custom HTTP headers
  • agent (:string): use given user agent
  • timeout (:integer): set a timeout
  • proxy (:string): use given proxy url
  • certificate (:string): use SSL certificate at given path
  • raw (:logical): return raw response without processing

Returns

:dictionary

Examples

print request "https://httpbin.org/get" #[some:"arg" another: 123]
; [version:1.1 body:{
;     "args": {
;          "another": "123", 
;          "some": "arg"
;     }, 
;     "headers": {
;          "Content-Length": "0", 
;          "Host": "httpbin.org", 
;          "User-Agent": "Arturo HTTP Client / 0.9.75", 
;          "X-Amzn-Trace-Id": "Root=1-608fd4b2-6b8a34291cc2fbd17a678b0f"
;     }, 
;     "origin": "92.59.209.80", 
;     "url": "https://httpbin.org/get?some=arg&another=123"
; } headers:[server:gunicorn/19.9.0 content-length:341 access-control-allow-credentials:true content-type:application/json date:2021-05-03T10:47:14+02:00 access-control-allow-origin:* connection:keep-alive] status:200]
r: request "https://httpbin.org/get" #[some:"arg" another: 123]
body: read.json r\body
inspect body\headers
; [ :dictionary
;       Content-Length   :	0 :string
;       Host             :	httpbin.org :string
;       User-Agent       :	Arturo HTTP Client / 0.9.75 :string
;       X-Amzn-Trace-Id  :	Root=1-608fd5f3-7e47203117863c111a3aef3b :string
; ]
print (request "https://httpbin.org/get" #[]) \ 'status
; 200
print request.post "https://httpbin.org/post" #[some:"arg" another: 123]
; ...same as above...

serve

start web server using given routes

Arguments

  • routes (:block)

Options

  • port (:integer): use given port
  • verbose (:logical): print info log
  • chrome (:logical): open in Chrome windows as an app

Returns

:nothing

Examples

serve .port:18966 [
    
    GET "/"                     [ "This is the homepage" ]
    GET "/post"                 $[id][ 
                                    send.html ~"This is the post with id: |id|" 
                                ]                
    POST "/getinfo"             $[id][ 
                                    send.json write.json ø #[
                                        i: id
                                        msg: "This is some info"
                                    ] 
                                ]
]

; run the app and go to localhost:18966 - that was it!
; the app will respond to GET requests to "/" or "/post?id=..."
; and also POST requests to "/getinfo" with an 'id' parameter

Numbers

abs

get the absolute value for given integer

Arguments

  • value (:integer,:floating,:complex,:rational)

Returns

:integer,:floating

Examples

print abs 6                 ; 6
print abs 6-7               ; 1
abs to :complex @[pi 1] 
; => 3.296908309475615

acos

calculate the inverse cosine of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print acos 0                ; 1.570796326794897
print acos 0.3              ; 1.266103672779499
print acos 1.0              ; 0.0
acos to :complex @[pi 1]
; => 0.3222532939814587-1.86711439316026i

acosh

calculate the inverse hyperbolic cosine of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print acosh 1.0             ; 0.0
print acosh 2               ; 1.316957896924817
print acosh 5.0             ; 2.292431669561178
acosh to :complex @[pi 1]
; => 1.86711439316026+0.3222532939814587i

acsec

calculate the inverse cosecant of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print acsec 0               ; nan
print acsec 1.0             ; 1.570796326794897
print acsec 10              ; 0.1001674211615598
acsec to :complex @[pi 1]
; => 0.2918255976444114-0.0959139808172324i

acsech

calculate the inverse hyperbolic cosecant of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print acsech 0              ; inf
print acsech 1.0            ; 0.0
print acsech 10             ; 0.09983407889920758
acsech to :complex @[pi 1]
; => 0.2862356627279947-0.08847073864038091i

actan

calculate the inverse cotangent of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print actan 0                   ; 1.570796326794897
print actan 1                   ; 0.7853981633974483
print actan 10.0                ; 0.09966865249116204
actan to :complex @[pi 1]
; => 0.2834557524705047-0.08505998507745414i

actanh

calculate the inverse hyperbolic cotangent of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print actanh 0                  ; nan
print actanh 1                  ; inf
print actanh 10.0               ; 0.1003353477310756
actanh to :complex @[pi 1]
; => 0.2946214403408572-0.09996750087543603i

angle

calculate the phase angle of given number

Arguments

  • number (:complex)

Returns

:floating

Examples

a: to complex [1 1]     ; a: 1.0+1.0i
print angle a           ; 0.7853981633974483

asec

calculate the inverse secant of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print asec 0                ; nan
print asec 45               ; 1.548572275176629
print asec 5                ; 1.369438406004566
asec to :complex @[pi 1]
; => 1.278970729150485+0.09591398081723231i

asech

calculate the inverse hyperbolic secant of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print asech 0               ; inf
print asech 0.45            ; 1.436685652839686
print asech 1               ; 0.0
asech to :complex @[pi 1]
; => 0.09591398081723221-1.278970729150485i

asin

calculate the inverse sine of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print asin 0                ; 0.0
print asin 0.3              ; 0.3046926540153975
print asin 1.0              ; 1.570796326794897
asin to :complex @[pi 1]
; => 1.248543032813438+1.867114393160262i

asinh

calculate the inverse hyperbolic sine of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print asinh 0               ; 0.0
print asinh 0.3             ; 0.2956730475634224
print asinh 1.0             ; 0.881373587019543
asinh to :complex @[pi 1]
; => 1.904627686970658+0.2955850342116299i

atan

calculate the inverse tangent of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print atan 0                ; 0.0
print atan 0.3              ; 0.2914567944778671
print atan 1.0              ; 0.7853981633974483
atan to :complex @[pi 1]
; => 1.287340574324392+0.08505998507745416i

atan2

calculate the inverse tangent of y / x

Arguments

  • y (:integer,:floating,:rational)
  • x (:integer,:floating,:rational)

Returns

:floating,:complex

Examples

atan2 1 1           ; 0.7853981633974483
atan2 1 1.5         ; 0.9827937232473291

atanh

calculate the inverse hyperbolic tangent of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print atanh 0               ; 0.0
print atanh 0.3             ; 0.3095196042031118
print atanh 1.0             ; inf
atanh to :complex @[pi 1]
; => 0.2946214403408571+1.470828825919461i

ceil

calculate the smallest integer not smaller than given value

Arguments

  • value (:integer,:floating,:rational)

Returns

:integer

Examples

print ceil 2.1                      ; 3
print ceil 2.9                      ; 3
print ceil neg 3.5                  ; -3
print ceil 4                        ; 4
print ceil to :rational @[neg 7 2]  ; -3

clamp

force value within given range

Arguments

  • number (:integer,:floating,:rational)
  • range (:block,:range)

Returns

:integer,:floating,:rational

Examples

clamp 2 1..3                        ; 2
clamp 0 1..3                        ; 1
clamp 4 1..3                        ; 3
clamp 4 3..1                        ; 3
clamp 5 range.step: 2 0 5           ; 4

clamp 4.5 0..6                      ; 4.5
clamp to :rational [1 5] 0..1       ; 1/5

clamp 4.5 [1 2.5]                   ; 2.5
clamp 2 [5 10]                      ; 5
clamp 2 [10 5]                      ; 5
clamp 2.5 @[1 to :rational [5 2]]   ; 2.5

conj

calculate the complex conjugate of given number

Arguments

  • number (:complex)

Returns

:complex

Examples

b: to :complex [1 2]        ; b: 1.0+2.0i
print conj b                ; 1.0-2.0i

cos

calculate the cosine of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print cos 0                 ; 1.0
print cos 0.3               ; 0.955336489125606
print cos 1.0               ; 0.5403023058681398
cos to :complex [1 1]
; => 0.8337300251311491-0.9888977057628651i

cosh

calculate the hyperbolic cosine of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print cosh 0                ; 1.0
print cosh 0.3              ; 1.04533851412886
print cosh 1.0              ; 1.543080634815244
cosh to :complex [2 1]
; => 2.032723007019666+3.0518977991518i

csec

calculate the cosecant of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print csec 0                ; inf
print csec 0.3              ; 3.383863361824123
print csec 1.0              ; 1.188395105778121
csec to :complex [1 1]  
; => 0.6215180171704283-0.3039310016284264i

csech

calculate the hyperbolic cosecant of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print csech 0               ; inf
print csech 0.3             ; 3.283853396698424
print csech 1.0             ; 0.8509181282393216
csech to :complex [1 1]
; => 0.3039310016284264-0.6215180171704283i

ctan

calculate the cotangent of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print ctan 0                ; inf
print ctan 0.3              ; 3.232728143765828
print ctan 1.0              ; 0.6420926159343308
ctan to :complex [1 1]
; => 0.2176215618544027-0.8680141428959249i

ctanh

calculate the hyperbolic cotangent of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print ctanh 0               ; inf
print ctanh 0.3             ; 3.432738430321741
print ctanh 1.0             ; 1.313035285499331
ctanh to :complex [1 1]
; => 0.8680141428959249-0.2176215618544027i

denominator

get the denominator of given number

Arguments

  • number (:integer,:floating,:rational)

Returns

:integer

Examples

num: to :rational 12.4      ; num: 62/5
print denominator num
; => 5
print denominator 10
; => 1

digits

convert a number into an array of digits or an array of digits back into a number

Arguments

  • number (:integer,:block)

Options

  • base (:integer): use given based (default: 10)

Returns

:block

Examples

digits 123
; => [1 2 3]

digits [1 2 3]
; => 123

digits 0
; => [0]

digits neg 12345
; => [1 2 3 4 5]

; digits 1231231231231231231231231231023
; => [1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 0 2 3]

epsilon

the constant e, Euler's number

Examples


even?

check if given number is even

Arguments

  • number (:integer)

Returns

:logical

Examples

even? 4           ; => true
even? 3           ; => false
print select 1..10 => even?       ; 2 4 6 8 10

exp

calculate the exponential function for given value

Arguments

  • value (:integer,:floating,:complex,:rational)

Returns

:floating,:complex

Examples

print exp 1.0           ; 2.718281828459045
print exp 0             ; 1.0
print exp neg 1.0       ; 0.3678794411714423
exp to :complex @[pi 1]
; => 12.50296958887651+19.47222141884161i

factorial

calculate the factorial of given value

Arguments

  • value (:integer)

Returns

:integer

Examples

factorial 1         ; => 1
factorial 5         ; => 120
factorial 20        ; => 2432902008176640000

factors

get list of factors for given integer

Arguments

  • number (:integer)

Options

  • prime (:logical): prime factorization

Returns

:block

Examples

factors 16                                  ; => [1 2 4 8 16]
factors.prime 48                            ; => [2 2 2 2 3]
unique factors.prime 48                     ; => [2 3]

factors.prime 18446744073709551615123120
; => [2 2 2 2 3 5 61 141529 26970107 330103811]

floor

calculate the largest integer not greater than given value

Arguments

  • value (:integer,:floating,:rational)

Returns

:integer

Examples

print floor 2.1                     ; 2
print floor 2.9                     ; 2
print floor neg 3.5                 ; -4
print floor 4                       ; 4
print floor to :rational @[neg 7 2] ; -4

gamma

calculate the gamma function for given value

Arguments

  • value (:integer,:floating,:rational)

Returns

:floating

Examples

print gamma 3.0         ; 2.0
print gamma 10.0        ; 362880.0
print gamma 15          ; 87178291199.99985

gcd

calculate greatest common divisor for given collection of integers

Arguments

  • numbers (:block)

Returns

:integer

Examples

print gcd [48 60 120]         ; 12

hypot

calculate the hypotenuse of a right-angle triangle with given base and height

Arguments

  • base (:integer,:floating,:rational)
  • height (:integer,:floating,:rational)

Returns

:floating

Examples

print hypot 3 4
; 5.0

print hypot 4.0 5.0
; 6.403124237432849

infinite

the IEEE floating point value of positive infinity

Examples


infinite?

check whether given value is an infinite one

Arguments

  • value (:any)

Returns

:logical

Examples

infinite? 4             ; false
infinite? infinite      ; true
infinite? ∞             ; true
a: infinite
infinite? a             ; true

b: 0
infinite? b             ; false

lcm

calculate least common multiplier for given collection of integers

Arguments

  • numbers (:block)

Returns

:integer

Examples

print lcm [48 60 120]         ; 240

ln

calculate the natural logarithm of given value

Arguments

  • value (:integer,:floating,:complex,:rational)

Returns

:floating,:complex

Examples

print ln 1.0                ; 0.0
print ln 0                  ; -inf
print ln neg 7.0            ; nan
ln to :complex @[pi 1]
; => 1.19298515341341+0.308169071115985i

log

calculate the logarithm of value using given base

Arguments

  • value (:integer,:floating,:rational)
  • base (:integer,:floating,:rational)

Returns

:floating

Examples

print log 9 3           ; 2.0
print log 32.0 2.0      ; 5.0
print log 0.0 2         ; -inf
print log 100.0 10.0    ; 2.0

negative?

check if given number is negative

Arguments

  • number (:integer,:floating,:complex,:rational)

Returns

:logical

Examples

negative? 5       ; => false
negative? 6-7     ; => true

numerator

get the numerator of given number

Arguments

  • number (:integer,:floating,:rational)

Returns

:integer

Examples

num: to :rational 12.4      ; num: 62/5
print numerator num
; => 62
print numerator 10
; => 10

odd?

check if given number is odd

Arguments

  • number (:integer)

Returns

:logical

Examples

odd? 4            ; => false
odd? 3            ; => true
print select 1..10 => odd?       ; 1 3 5 7 9

pi

the number pi, mathematical constant

Examples


positive?

check if given number is positive

Arguments

  • number (:integer,:floating,:complex,:rational)

Returns

:logical

Examples

positive? 5       ; => true
positive? 6-7     ; => false

powmod

modular exponentation: calculate the result of (base^exponent) % divider

Arguments

  • base (:integer)
  • exponent (:integer)
  • divider (:integer)

Returns

:null,:integer

Examples

powmod 1 10 3   ; => 1
    powmod 3 2 6    ; => 3
    powmod 5 5 15   ; => 5
    powmod 2 3 5    ; => 3
    powmod 2 4 5    ; => 1

    print (powmod 2 168277 673109) = (2 ^ 168277) % 673109
    ; true

prime?

check if given integer is prime

Arguments

  • number (:integer)

Returns

:logical

Examples

prime? 2          ; => true
prime? 6          ; => false
prime? 11         ; => true
; let's check the 14th Mersenne:
; 53113799281676709868958820655246862732959311772703192319944413
; 82004035598608522427391625022652292856688893294862465010153465
; 79337652707239409519978766587351943831270835393219031728127

prime? (2^607)-1  ; => true

product

calculate the product of all values in given list

Arguments

  • collection (:block,:range)

Options

  • cartesian (:logical): return the cartesian product of given sublists

Returns

:integer,:floating,:rational

Examples

print product [3 4]       ; 12
print product [1 2 4 6]   ; 48
print product []          ; 1
print product 1..10       ; 3628800
product.cartesian [[A B C][D E]]
; => [[A D] [A E] [B D] [B E] [C D] [C E]]

random

get a random integer between given limits

Arguments

  • lowerLimit (:integer,:floating,:rational)
  • upperLimit (:integer,:floating,:rational)

Returns

:integer,:floating

Examples

rnd: random 0 60          ; rnd: (a random number between 0 and 60)

reciprocal

calculate the reciprocal of given number

Arguments

  • value (:integer,:floating,:rational)

Returns

:rational

Examples

r: to :rational [3 2]

print reciprocal r
; 2/3
reciprocal 3        ; => 1/3
reciprocal 3.2      ; => 5/16

round

round given value

Arguments

  • value (:integer,:floating,:rational)

Options

  • to (:integer): round to given decimal places

Returns

:floating

Examples

print round 2.1                     ; 2.0
print round 2.9                     ; 3.0
print round 6                       ; 6.0

print round to :rational [29 10]    ; 3.0
print round to :rational [21 10]    ; 2.0
print round to :rational [5 2]      ; 3.0

print round pi          ; 3.0
print round.to:5 pi     ; 3.14159
print round.to:2 pi     ; 3.14

sec

calculate the secant of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print sec 0                 ; 1.0
print sec 0.3               ; 1.046751601538086
print sec 1.0               ; 1.850815717680925
sec to :complex [1 1]
; => 0.4983370305551868+0.591083841721045i

sech

calculate the hyperbolic secant of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print sech 0                ; 1.0
print sech 0.3              ; 0.9566279119002483
print sech 1.0              ; 0.6480542736638855
sech to :complex [1 1]
; => 0.4983370305551868-0.5910838417210451i

sin

calculate the sine of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print sin 0                 ; 0.0
print sin 0.3               ; 0.2955202066613395
print sin 1.0               ; 0.8414709848078965
sin to :complex [1 1]
; => 0.4983370305551868-0.5910838417210451i

sinh

calculate the hyperbolic sine of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print sinh 0                ; 0.0
print sinh 0.3              ; 0.3045202934471426
print sinh 1.0              ; 1.175201193643801
sinh to :complex [1 1]
; => 0.6349639147847361+1.298457581415977i

sqrt

get square root of given value

Arguments

  • value (:integer,:floating,:complex,:rational)

Options

  • integer (:logical): get the integer square root

Returns

:floating

Examples

print sqrt 4                ; 2.0
print sqrt 16.0             ; 4.0
print sqrt 1.45             ; 1.20415945787923
sqrt to :complex @[pi 1]
; => 1.794226987182141+0.2786715413222365i

sum

calculate the sum of all values in given list

Arguments

  • collection (:block,:range)

Returns

:integer,:floating,:rational

Examples

print sum [3 4]           ; 7
print sum [1 2 4 6]       ; 13
print sum 1..10           ; 55

tan

calculate the tangent of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print tan 0                 ; 0.0
print tan 0.3               ; 0.3093362496096232
print tan 1.0               ; 1.557407724654902
tan to :complex [1 1]
; => 0.2717525853195119+1.083923327338695i

tanh

calculate the hyperbolic tangent of given angle

Arguments

  • angle (:integer,:floating,:complex,:rational,:quantity)

Returns

:floating,:complex

Examples

print tanh 0            ; 0.0
print tanh 0.3          ; 0.2913126124515909
print tanh 1.0          ; 0.7615941559557649
tanh to :complex [1 1]
; => 1.083923327338695+0.2717525853195117i

tau

the number tau, mathematical constant

Examples


Paths

absolute?

check if given path is an absolute path

Arguments

  • path (:string)

Returns

:logical

Examples

absolute? "/usr/bin"        ; => true
absolute? "usr/bin"         ; => false

extract

extract components from path

Arguments

  • path (:string,:color)

Options

  • directory (:logical): get path directory
  • basename (:logical): get path basename (filename+extension)
  • filename (:logical): get path filename
  • extension (:logical): get path extension
  • scheme (:logical): get scheme field from URL
  • host (:logical): get host field from URL
  • port (:logical): get port field from URL
  • user (:logical): get user field from URL
  • password (:logical): get password field from URL
  • path (:logical): get path field from URL
  • query (:logical): get query field from URL
  • anchor (:logical): get anchor field from URL
  • red (:logical): get red component from color
  • green (:logical): get green component from color
  • blue (:logical): get blue component from color
  • alpha (:logical): get alpha component from color
  • hsl (:logical): get HSL representation from color
  • hsv (:logical): get HSV representation from color
  • hue (:logical): get hue component from color
  • saturation (:logical): get saturation component from color
  • luminosity (:logical): get luminosity component from color

Returns

:string,:dictionary

Examples

path: "/this/is/some/path.txt"

print extract.directory path        ; /this/is/some
print extract.basename path         ; path.txt
print extract.filename path         ; path
print extract.extension path        ; .txt

print extract path 
; [directory:/this/is/some basename:path.txt filename:path extension:.txt]
url: "http://subdomain.website.com:8080/path/to/file.php?q=something#there"

print extract.scheme url            ; http
print extract.host url              ; subdomain.website.com
print extract.port url              ; 8080
print extract.user url              ; 
print extract.password url          ;
print extract.path url              ; /path/to/file.php
print extract.query url             ; q=something
print extract.anchor url            ; there

print extract url
; [scheme:http host:subdomain.website.com port:8080 user: password: path:/path/to/file.php query:q=something anchor:there]
extract #magenta
; => [red:255 green:0 blue:255]

extract.red #FF126D
; => 255

extract.hsl #magenta
; => [hue:300 saturation:1.0 luminosity:0.5]

extract.hue #magenta
; => 300

list

get files in given path

Arguments

  • path (:string)

Options

  • recursive (:logical): perform recursive search
  • relative (:logical): get relative paths

Returns

:block

Examples

loop list "." 'file [
    print file
]

; tests
; var
; data.txt

normalize

get normalized version of given path

Arguments

  • path (:string,:literal,:pathliteral)

Options

  • executable (:logical): treat path as executable
  • tilde (:logical): expand tildes in path

Returns

:string,:nothing

Examples

normalize "one/../two/../../three"
; => ../three

normalize "~/one/../two/../../three"
; => three
normalize.tilde "~/one/../two/../../three"
; => /Users/three

normalize.tilde "~/Documents"
; => /Users/drkameleon/Documents
normalize.executable "myscript"
; => ./myscript

relative

get relative path for given path, based on current script's location

Arguments

  • path (:string)

Returns

:string

Examples

; we are in folder: /Users/admin/Desktop

print relative "test.txt"
; /Users/admin/Desktop/test.txt

Quantities

alphaParticleMass

the mass of an alpha particle

Examples


angstromStar

one ten-billionth of a meter

Examples


atomicMass

the mass of an atomic mass unit

Examples


avogadroConstant

the number of atoms in 12 grams of carbon-12

Examples


bohrRadius

the radius of the first Bohr orbit of the hydrogen atom

Examples


boltzmannConstant

the ratio of the universal gas constant to Avogadro's number

Examples


classicalElectronRadius

the radius of an electron

Examples


conductanceQuantum

the conductance of a superconductor

Examples


conforms?

check if given quantities/units are compatible

Arguments

  • a (:unit,:quantity)
  • b (:unit,:quantity)

Returns

:logical

Examples

conforms? 3`m `m                ; => true
conforms? 4`m `cm               ; => true

4`yd := 5`m                     ; => true
5`m := `s                       ; => false
givenValue: 6`yd/s      

conforms? givenValue `m         ; => false
conforms? givenValue `km/h      ; => true
3`m := 4`m                      ; => true
5`W := 5`N                      ; => false
5`W := 3`J/s                    ; => true

convert

convert quantity to given unit

Arguments

  • value (:integer,:floating,:rational,:quantity)
  • unit (:string,:word,:literal,:unit)

Returns

:quantity

Examples

print convert 3`m `cm
; 300.0 cm

print 1`yd2 --> `m2
; 0.836127 m²

deuteronMass

the mass of a deuteron

Examples


electronCharge

the charge of an electron

Examples


electronMass

the mass of an electron

Examples


electronMassEnergy

the energy equivalent of the mass of an electron

Examples


gravitationalConstant

the gravitational constant

Examples


hartreeEnergy

the energy of the ground state of the hydrogen atom

Examples


helionMass

the mass of a helion

Examples


impedanceOfVacuum

the impedance of free space

Examples


in

convert quantity to given unit

Arguments

  • unit (:string,:word,:literal,:unit)
  • value (:integer,:floating,:rational,:quantity)

Returns

:quantity

Examples

print in`cm 3`m
; 300.0 cm

print in`m2 1`yd2
; 0.836127 m²

inverseConductanceQuantum

the inverse of the conductance of a superconductor

Examples


josephsonConstant

The inverse of the flux quantum

Examples


magneticFluxQuantum

the magnetic flux of a superconductor

Examples


molarGasConstant

the universal gas constant

Examples


muonMass

the mass of a muon

Examples


neutronMass

the mass of a neutron

Examples


planckConstant

the ratio of the energy of a photon to its frequency

Examples


planckLength

the length of the Planck scale

Examples


planckMass

the mass of the Planck scale

Examples


planckTemperature

the temperature of the Planck scale

Examples


planckTime

the time of the Planck scale

Examples


property

get the described property of given quantity or unit

Arguments

  • quantity (:unit,:quantity)

Options

  • hash (:logical): get property as a hash

Returns

:integer,:literal

Examples

property 3`m            ; => 'length
property 4`m2           ; => 'area
property 5`m3           ; => 'volume

property 6`J/s          ; => 'power
property 3`V            ; => 'potential

protonMass

the mass of a proton

Examples


protonMassEnergy

the energy equivalent of the mass of a proton

Examples


reducedPlanckConstant

the ratio of the energy of a photon to its frequency

Examples


rydbergConstant

the Rydberg constant

Examples


scalar

get quantity value in the appropriate numeric type

Arguments

  • value (:quantity)

Returns

:integer,:floating,:rational

Examples

scalar 3`m              ; => 3
scalar 4.0`m2           ; => 4
scalar 10:2`m3          ; => 5
scalar 3.1`m            ; => 3.1
scalar 5:2`m            ; => 2.5    
scalar 13:3`m           ; => 13/3

specify

define new user unit

Arguments

  • name (:string,:literal)
  • value (:unit,:quantity)

Options

  • symbol (:string): define main unit symbol
  • describes (:string): set corresponding property for new unit
  • property (:logical): define a new property

Returns

:literal

Examples

specify 'nauMile 1.1508`mi

print 2`nauMile                ; 2 nauMile
print 3`nauMile --> `km        ; 5.5560992256 km
specify.symbol:"NM" 'nauMile 1.1508`mi

print 2`nauMile                ; 2 NM
specify.describes:"coding speed" 'lph `lines/h

print 100`lph                   ; 100 lph
print property 100`lph          ; coding speed
specify.property "sweetness" `tspSugar

print property 3`tspSugar       ; sweetness

speedOfLight

the speed of light in a vacuum

Examples


standardGasVolume

the volume of one mole of an ideal gas at standard temperature and pressure

Examples


standardPressure

the standard pressure

Examples


standardTemperature

the standard temperature

Examples


tauMass

the mass of a tau

Examples


thomsonCrossSection

the cross section of an electron

Examples


tritonMass

the mass of a triton

Examples


units

get the units of given quantity

Arguments

  • value (:unit,:quantity)

Options

  • base (:logical): get base units

Returns

:unit

Examples

units 3`m               ; => `m
units `m2               ; => `m2
units 8`J/s             ; => `J/s
units 7`W               ; => `W
units.base 3`m          ; => `m
units.base `m2          ; => `m2
units.base 8`J/s        ; => `J/s
units.base 7`W          ; => `J/s
specify 'ff 3`items
units 3`ff              ; => `items
units.base 3`ff         ; => `items
units.base 3`ff.ha      ; => `items.m2
specify 'kk 3`m2        
units 3`kk              ; => `kk
units.base 3`kk         ; => `m2

vacuumPermeability

the permeability of free space

Examples


vacuumPermittivity

the permittivity of free space

Examples


vonKlitzingConstant

the resistance of a superconductor

Examples


Reflection

arity

get index of function arities

Returns

:dictionary

Examples

print arity\print   ; 1

attr

get given attribute, if it exists

Arguments

  • name (:string,:literal)

Returns

:null,:any

Examples

multiply: function [x][
    if? attr? "with" [ 
        x * attr "with"
    ] 
    else [ 
        2*x 
    ]
]

print multiply 5
; 10

print multiply.with: 6 5
; 60

attr?

check if given attribute exists

Arguments

  • name (:string,:literal)

Returns

:logical

Examples

greet: function [x][
    switch attr? 'later
      -> ~"|x| I'm afraid, I'll greet you later"
      -> ~"Hello, |x|!"
]

greet "John"
; => Hello, John!

greet.later "John"
; => John I'm afraid, I'll greet you later!

; Have in mind that `attr?` won't pop your attribute's stack

greet "Joe"
; => Joe I'm afraid, I'll greet you later!

attrs

get dictionary of set attributes

Returns

:dictionary

Examples

greet: function [x][
    print ["Hello" x "!"]
    print attrs
]

greet.later "John"

; Hello John!
; [
;    later:    true
; ]

benchmark

benchmark given code

Arguments

  • action (:block,:bytecode)

Options

  • get (:logical): get benchmark time

Returns

:floating,:nothing

Examples

benchmark [ 
    ; some process that takes some time
    loop 1..10000 => prime? 
]

; [benchmark] time: 0.065s
benchmark.get [
    loop 1..10000 => prime?
]
; => 0.3237628936767578

info

print info for given symbol

Arguments

  • symbol (:string,:word,:literal,:pathliteral,:symbolliteral)

Options

  • get (:logical): get information as dictionary

Returns

:dictionary,:nothing

Examples

info 'print

; |--------------------------------------------------------------------------------
; |          print  :function                                                   Io
; |--------------------------------------------------------------------------------
; |                 print given value to screen with newline
; |--------------------------------------------------------------------------------
; |          usage  print value :any
; |
; |        options  .lines -> print each value in block in a new line
; |
; |        returns  :nothing
; |--------------------------------------------------------------------------------
info '++

; |--------------------------------------------------------------------------------
; |         append  :function                                          0x107555A10
; |          alias  ++
; |--------------------------------------------------------------------------------
; |                 append value to given collection
; |--------------------------------------------------------------------------------
; |          usage  append collection :char :string :literal :block
; |                        value :any
; |
; |        returns  :string :block :nothing
; |--------------------------------------------------------------------------------
print info.get 'print
; [name:print address:0x1028B3410 type::function module:Io args:[value:[:any]] attrs:[] returns:[:nothing] description:print given value to screen with newline example:print "Hello world!"          ; Hello world!]

inspect

print full dump of given value to screen

Arguments

  • value (:any)

Options

  • muted (:logical): don't use color output

Returns

:nothing

Examples

inspect 3                 ; 3 :integer

a: "some text"
inspect a                 ; some text :string

methods

get list of methods for given object or module

Arguments

  • object (:object,:module)

Returns

:block

Examples

define :cat [
    init: method [nick][
        this\nick: join.with: " " @["Mr." capitalize nick]
    ]

    meow: method [][
        print [this\nick ":" "'meow!'"]
    ]
]

snowflake: to :cat ["snowflake"]
methods snowflake
; => [init meow]

stack

get current stack

Returns

:dictionary

Examples

1 2 3 "done"

print stack
; 1 2 3 done

standalone?

checks if current script runs from the command-line

Returns

:logical

Examples

doSomething: function [x][
    print ["I'm doing something with" x]
]

if standalone? [
    print "It's running from command line and not included."
    print "Nothing to do!"
]

symbols

get currently defined symbols

Returns

:dictionary

Examples

a: 2
b: "hello"

print symbols

; [
;    a: 2
;    b: "hello"
;_]

Sets

difference

return the difference of given sets

Arguments

  • setA (:literal,:pathliteral,:block)
  • setB (:block)

Options

  • symmetric (:logical): get the symmetric difference

Returns

:block,:nothing

Examples

print difference [1 2 3 4] [3 4 5 6]
; 1 2
a: [1 2 3 4]
b: [3 4 5 6]
difference 'a b
; a: [1 2]
print difference.symmetric [1 2 3 4] [3 4 5 6]
; 1 2 5 6

disjoint?

check if given sets are disjoint (they have no common elements)

Arguments

  • setA (:block)
  • setB (:block)

Returns

:logical

Examples

disjoint? [1 2 3 4] [3 4 5 6]
; => false

disjoint? [1 2 3 4] [5 6 7 8]
; => true

intersect?

check if given sets intersect (they have at least one common element)

Arguments

  • setA (:block)
  • setB (:block)

Returns

:logical

Examples

intersect? @1..10 @8..12
; => true

intersect? ["one" "two" "three"] ["three" "four" "five"]
; => true

intersect? ["one" "two" "three"] ["four" "five" "six"]
; => false

intersection

return the intersection of given sets

Arguments

  • setA (:literal,:pathliteral,:block)
  • setB (:block)

Returns

:block,:nothing

Examples

print intersection [1 2 3 4] [3 4 5 6]
; 3 4
a: [1 2 3 4]
b: [3 4 5 6]
intersection 'a b
; a: [3 4]

powerset

return the powerset of given set

Arguments

  • set (:literal,:pathliteral,:block)

Returns

:block,:nothing

Examples

powerset [1 2 3]
;  [[] [1] [2] [1 3] [3] [1 2] [2 3] [1 2 3]]

subset?

check if given set is a subset of second set

Arguments

  • setA (:block)
  • setB (:block)

Options

  • proper (:logical): check if proper subset

Returns

:logical

Examples

subset? [1 3] [1 2 3 4]
; => true

subset?.proper [1 3] [1 2 3 4]
; => true

subset? [1 3] [3 5 6]
; => false

subset? [1 3] [1 3]
; => true

subset?.proper [1 3] [1 3]
; => false

superset?

check if given set is a superset of second set

Arguments

  • setA (:block)
  • setB (:block)

Options

  • proper (:logical): check if proper superset

Returns

:logical

Examples

superset? [1 2 3 4] [1 3]
; => true

superset?.proper [1 2 3 4] [1 3]
; => true

superset? [3 5 6] [1 3]
; => false

superset? [1 3] [1 3]
; => true

superset?.proper [1 3] [1 3]
; => false

union

return the union of given sets

Arguments

  • setA (:literal,:pathliteral,:block)
  • setB (:block)

Returns

:block,:nothing

Examples

print union [1 2 3 4] [3 4 5 6]
; 1 2 3 4 5 6
a: [1 2 3 4]
b: [3 4 5 6]
union 'a b
; a: [1 2 3 4 5 6]

Sockets

accept

accept incoming connection and return corresponding socket

Arguments

  • server (:socket)

Returns

:socket

Examples

server: listen.blocking 18966
print "started server connection..."

client: accept server
print ["accepted incoming connection from:" client]

connect

create new socket connection to given server port

Arguments

  • port (:integer)

Options

  • to (:string): set socket address
  • udp (:logical): use UDP instead of TCP

Returns

:socket

Examples

; connect to local server on port 18966
server: connect 18966
; "connect" to a udp server on port 12345
server: connect.udp 12345
; connect to a remote server on port 18966
server: connect.to:"123.456.789.123" 18966

listen

start listening on given port and return new socket

Arguments

  • port (:integer)

Options

  • blocking (:logical): set blocking mode (default: false)
  • udp (:logical): use UDP instead of TCP

Returns

:socket

Examples

; start a server listening on port 18966
server: listen 18966

receive

receive line of data from selected socket

Arguments

  • origin (:socket)

Options

  • size (:integer): set maximum size of received data
  • timeout (:integer): set timeout (in milliseconds)

Returns

:string

Examples

server: listen.blocking 18966
print "started server connection..."

client: accept server
print ["accepted incoming connection from:" client]

keepGoing: true
while [keepGoing][
    message: receive client
    print ["received message:" message]

    if message = "exit" [
        unplug client
        keepGoing: false
    ]
]

unplug server

send

send given message to selected socket

Arguments

  • destination (:socket)
  • message (:string)

Options

  • chunk (:logical): don't send data as a line of data

Returns

:nothing

Examples

; connect to a local server on port 256
socket: connect.to:"localhost" 256

; send a message to the server
send socket "Hello Socket World"

send?

send given message to selected socket and return true if successful

Arguments

  • destination (:socket)
  • message (:string)

Returns

:logical

Examples

; connect to a local server on port 256
socket: connect.to:"localhost" 256

; send a message to the server
; and check if it was successful
sent?: send? socket "Hello Socket World"

print ["Message was sent successfully:" sent?]

unplug

close given socket

Arguments

  • socket (:socket)

Returns

:nothing

Examples

; connect to a local server on port 256
socket: connect.to:"localhost" 256

; send a message to the server
send socket "Hello Socket World"

; disconnect from the server
unplug socket

Statistics

average

get average from given collection of numbers

Arguments

  • collection (:block,:range)

Returns

:floating

Examples

print average [2 4 5 6 7 2 3]
; 4.142857142857143

deviation

get population standard deviation of given collection of numbers

Arguments

  • collection (:block)

Options

  • sample (:logical): calculate the sample standard deviation

Returns

:floating

Examples

arr:  [1 2 3 4]
arr2: [3 120 4 7 87 2 6 34]

print deviation arr         ; 1.118033988749895
print deviation arr2        ; 42.70959347734417

deviation.sample arr        ; => 1.290994448735806
deviation.sample arr2       ; => 45.65847597731914

kurtosis

get population kurtosis of given collection of numbers

Arguments

  • collection (:block)

Options

  • sample (:logical): calculate the sample kurtosis

Returns

:floating

Examples

arr:  [1 2 3 4]
arr2: [3 120 4 7 87 2 6 34]

print kurtosis arr          ; -1.36
print kurtosis arr2         ; -0.3863717894076322

kurtosis.sample arr         ; => -1.200000000000001
kurtosis.sample arr2        ; => 0.5886192422439724

median

get median from given collection of numbers

Arguments

  • collection (:block)

Returns

:null,:integer,:floating

Examples

print median [2 4 5 6 7 2 3]
; 6

print median [1 5 2 3 4 7 9 8]
; 3.5

skewness

get population skewness of given collection of numbers

Arguments

  • collection (:block)

Options

  • sample (:logical): calculate the sample skewness

Returns

:floating

Examples

arr:  [1 2 3 4]
arr2: [3 120 4 7 87 2 6 34]

print skewness arr          ; 0.0
print skewness arr2         ; 1.127950016816592

skewness.sample arr         ; => 0.0
skewness.sample arr2        ; => 1.40680083744453

variance

get population variance of given collection of numbers

Arguments

  • collection (:block)

Options

  • sample (:logical): calculate the sample variance

Returns

:floating

Examples

arr:  [1 2 3 4]
arr2: [3 120 4 7 87 2 6 34]

print variance arr          ; 1.25
print variance arr2         ; 1824.109375

variance.sample arr         ; => 1.666666666666667
variance.sample arr2        ; => 2084.696428571428

Strings

alphabet

get dictionary-index charset for given locale

Arguments

  • locale (:string,:literal)

Options

  • lower (:logical): return lowercase characters (default)
  • upper (:logical): return uppercase characters
  • all (:logical): also return non-dictionary characters

Returns

:null,:block

Examples

alphabet'es
; => [a b c d e f g h i j k l m n ñ o p q r s t u v w x y z]

alphabet.upper 'es
; => [A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z]

alphabet.all 'es
; => [a b c d e f g h i j k l m n ñ o p q r s t u v w x y z á é í ó ú ü]

alphabet.lower.upper.all 'es
; => [a b c d e f g h i j k l m n ñ o p q r s t u v w x y z á é í ó ú ü A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z Á É Í Ó Ú Ü]

ascii?

check if given character/string is in ASCII

Arguments

  • string (:char,:string)

Returns

:logical

Examples

ascii? `d`              ; true
ascii? `😀`             ; false

ascii? "hello world"    ; true
ascii? "Hællø wœrld"    ; false
ascii? "Γειά!"          ; false

capitalize

convert given string to capitalized

Arguments

  • string (:char,:string,:literal,:pathliteral)

Returns

:char,:string,:nothing

Examples

print capitalize "hello World"      ; "Hello World"
str: "hello World"
capitalize 'str                     ; str: "Hello World"

escape

escape given string

Arguments

  • string (:string,:literal,:pathliteral)

Options

  • json (:logical): for literal use in JSON strings
  • regex (:logical): for literal use in regular expression
  • shell (:logical): for use in a shell command
  • xml (:logical): for use in an XML document

Returns

:string,:nothing

Examples

str: {a long "string" + with \diffe\rent symbols.}

print escape str
; "a long \"string\" + with \\diffe\\rent symbols."

print escape.json str
; a long \"string\" + with \\diffe\\rent symbols.

print escape.regex str
; a\x20long\x20\x22string\x22\x20\x2B\x20with\x20\x5Cdiffe\x5Crent\x20symbols\x2E

print escape.shell str
; 'a long "string" + with \diffe\rent symbols.'

print escape.xml str
; a long &quot;string&quot; + with \diffe\rent symbols.

indent

indent each line of given text

Arguments

  • text (:string,:literal,:pathliteral)

Options

  • n (:integer): pad by given number of spaces (default: 4)
  • with (:string): use given padding

Returns

:string,:nothing

Examples

str: "one\ntwo\nthree"

print indent str
;     one
;     two
;     three

print indent .n:10 .with:"#" str
; ##########one
; ##########two
; ##########three

jaro

calculate Jaro distance/similarity between given strings

Arguments

  • stringA (:string)
  • stringB (:string)

Returns

:floating

Examples

jaro "one" "one"        ; => 1.0

jaro "crate" "trace"    ; => 0.7333333333333334
jaro "dwayne" "duane"   ; => 0.8222222222222223

jaro "abcdef" "fedcba"  ; => 0.3888888888888888
jaro "abcde" "vwxyz"    ; => 0.0

join

join collection of values into string

Arguments

  • collection (:literal,:pathliteral,:block)

Options

  • with (:char,:string): use given separator
  • path (:logical): join as path components

Returns

:string,:nothing

Examples

arr: ["one" "two" "three"]
print join arr
; onetwothree

print join.with:"," arr
; one,two,three

join 'arr
; arr: "onetwothree"
print join ['H' 'e' 'l' 'l' 'o' '!']
; Hello!

print join @["1 + 2 = " 1+2]
; 1 + 2 = 3
join.with:'-' ["Hello" "world"]
; => "Hello-world"

levenshtein

calculate Levenshtein distance/similarity between given strings

Arguments

  • stringA (:string)
  • stringB (:string)

Options

  • align (:logical): return aligned strings
  • with (:char): use given filler for alignment (default: -)

Returns

:integer,:block

Examples

print levenshtein "for" "fur"         ; 1
print levenshtein "one" "one"         ; 0
print join.with:"\n" levenshtein .align "ACTGCACTGAC" "GCATGACTAT"
; AC-TGCACTGAC
; GCATG-ACT-AT

lower

convert given string to lowercase

Arguments

  • string (:char,:string,:literal,:pathliteral)

Returns

:char,:string,:nothing

Examples

print lower "hello World, 你好!"      ; "hello world, 你好!"
str: "hello World, 你好!"
lower 'str                           ; str: "hello world, 你好!"
ch: `A`
lower ch    
; => `a`

lower?

check if given string is lowercase

Arguments

  • string (:char,:string)

Returns

:logical

Examples

lower? "ñ"               ; => true
lower? "X"               ; => false
lower? "Hello World"     ; => false
lower? "hello"           ; => true

match

get matches within string, using given regular expression

Arguments

  • string (:string)
  • regex (:char,:string,:regex)

Options

  • once (:logical): get just the first match
  • count (:logical): just get number of matches
  • capture (:logical): get capture groups only
  • named (:logical): get named capture groups as a dictionary
  • bounds (:logical): get match bounds only
  • in (:range): get matches within given range
  • full (:logical): get results as an array of match results

Returns

:integer,:dictionary,:block

Examples

match "hello" "hello"                   ; => ["hello"]
match "x: 123, y: 456" {/[0-9]+/}       ; => ["123" "456"]
match "this is a string" {/[0-9]+/}     ; => []
match.once "x: 123, y: 456" {/[0-9]+/}      ; => ["123"]
match.count "some words" {/\w+/}        ; => 2
match.capture "abc" {/(.)/}             ; => ["a" "b" "c"]

match.capture "x: 123, y: 456 - z: 789, w: 012" 
              {/\w: (\d+), \w: (\d+)/}
; => [["123" "456"] ["789" "012"]]
inspect match.capture.named "x: 123, y: 456 - z: 789, w: 012" 
                            {/\w: (?<numA>\d+), \w: (?<numB>\d+)/}
;[ :block
;    [ :dictionary
;        numA  :		123 :string
;        numB  :		456 :string
;    ]
;    [ :dictionary
;        numA  :		789 :string
;        numB  :		012 :string
;    ]
;]
match.bounds "hELlo wORLd" {/[A-Z]+/} 
; => [1..2 7..9]
match.in:0..2 "hello" {/l/}             ; => ["l"]

match?

check if string matches given regular expression

Arguments

  • string (:string)
  • regex (:string,:regex)

Options

  • in (:range): get matches within given range

Returns

:logical

Examples

match? "hello" {/l/}            ; => true
match? "hello" {/x/}            ; => false

match? "hello" "l"              ; => true
match?.in:0..1 "hello" {/l/}        ; => false
match?.in:2..4 "hello" {/l/}        ; => true

numeric?

check if given string is numeric

Arguments

  • string (:char,:string)

Returns

:logical

Examples

numeric? "hello"           ; => false
numeric? "3.14"            ; => true
numeric? "18966"           ; => true
numeric? "123xxy"          ; => false

outdent

outdent each line of given text, by using minimum shared indentation

Arguments

  • text (:string,:literal,:pathliteral)

Options

  • n (:integer): unpad by given number of spaces
  • with (:string): use given padding

Returns

:string,:nothing

Examples

print outdent {:
    one
        two
        three
:}
; one
;     two
;     three
print outdent.n:1 {:
    one
        two
        three
:}
;  one
;      two
;      three

pad

align string by adding given padding

Arguments

  • string (:string,:literal,:pathliteral)
  • padding (:integer)

Options

  • center (:logical): add padding to both sides
  • right (:logical): add right padding
  • with (:char): pad with given character

Returns

:string

Examples

pad "good" 10                 ; => "      good"
pad.right "good" 10           ; => "good      "
pad.center "good" 10          ; => "   good   "
a: "hello"
pad 'a 10                     ; a: "     hello"
pad.with:`0` to :string 123 5   
; => 00123

prefix?

check if string starts with given prefix

Arguments

  • string (:string)
  • prefix (:string,:regex)

Returns

:logical

Examples

prefix? "hello" "he"          ; => true
prefix? "boom" "he"           ; => false

render

render template with |string| interpolation

Arguments

  • template (:string,:literal,:pathliteral)

Options

  • once (:logical): don't render recursively
  • template (:logical): render as a template

Returns

:string,:nothing

Examples

x: 2
greeting: "hello"
print ~"|greeting|, your number is |x|"       ; hello, your number is 2

replace

replace every matched substring/s by given replacement string and return result

Arguments

  • string (:string,:literal,:pathliteral)
  • match (:string,:regex,:block)
  • replacement (:string,:block)

Returns

:string,:nothing

Examples

replace "hello" "l" "x"         ; => "hexxo"
str: "hello"
replace 'str "l" "x"            ; str: "hexxo"
replace "hello" ["h" "l"] "x"           ; => "xexxo"
replace "hello" ["h" "o"] ["x" "z"]     ; => "xellz"

strip

strip whitespace from given string

Arguments

  • string (:string,:literal,:pathliteral)

Options

  • start (:logical): strip leading whitespace
  • end (:logical): strip trailing whitespace

Returns

:string,:nothing

Examples

str: "     Hello World     "

print ["strip all:"      ">" strip str       "<"]
print ["strip leading:"  ">" strip.start str "<"]
print ["strip trailing:" ">" strip.end str   "<"]

; strip all: > Hello World < 
; strip leading: > Hello World      < 
; strip trailing: >      Hello World <

suffix?

check if string ends with given suffix

Arguments

  • string (:string)
  • suffix (:string,:regex)

Returns

:logical

Examples

suffix? "hello" "lo"          ; => true
suffix? "boom" "lo"           ; => false

translate

takes a dictionary of translations and replaces each instance sequentially

Arguments

  • string (:string,:literal,:pathliteral)
  • translations (:dictionary)

Returns

:string,:nothing

Examples

print translate "the brown fox jumped over the lazy dog" #[
    brown: "green" 
    fox: "wolf" 
    jumped:"flew" 
    dog:"cat"
]
; the green wolf flew over the lazy cat

truncate

truncate string at given length

Arguments

  • string (:string,:literal,:pathliteral)
  • cutoff (:integer)

Options

  • with (:string): use given filler
  • preserve (:logical): preserve word boundaries

Returns

:string,:nothing

Examples

str: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse erat quam"

truncate str 30
; => "Lorem ipsum dolor sit amet, con..."

truncate.preserve str 30
; => "Lorem ipsum dolor sit amet,..."

truncate.with:"---" str 30
; => "Lorem ipsum dolor sit amet, con---"

truncate.preserve.with:"---" str 30
; => "Lorem ipsum dolor sit amet,---"

upper

convert given string to uppercase

Arguments

  • string (:char,:string,:literal,:pathliteral)

Returns

:char,:string,:nothing

Examples

print upper "hello World, 你好!"       ; "HELLO WORLD, 你好!"
str: "hello World, 你好!"
upper 'str                           ; str: "HELLO WORLD, 你好!"
ch: `a`
upper ch    
; => `A`

upper?

check if given string is uppercase

Arguments

  • string (:char,:string)

Returns

:logical

Examples

upper? "Ñ"               ; => true
upper? "x"               ; => false
upper? "Hello World"     ; => false
upper? "HELLO"           ; => true

whitespace?

check if given string consists only of whitespace

Arguments

  • string (:string)

Returns

:logical

Examples

whitespace? "hello"           ; => false
whitespace? " "               ; => true
whitespace? "\n \n"           ; => true

wordwrap

word wrap a given string

Arguments

  • string (:string,:literal,:pathliteral)

Options

  • at (:integer): use given max line width (default: 80)

Returns

:string

Examples

print wordwrap {Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mauris non justo mattis dignissim. Cras in lobortis felis, id ultricies ligula. Curabitur egestas tortor sed purus vestibulum auctor. Cras dui metus, euismod sit amet suscipit et, cursus ullamcorper felis. Integer elementum condimentum neque, et sagittis arcu rhoncus sed. In luctus congue eros, viverra dapibus mi rhoncus non. Pellentesque nisl diam, auctor quis sapien nec, suscipit aliquam velit. Nam ac nisi justo.}
; Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mauris non
; justo mattis dignissim. Cras in lobortis felis, id ultricies ligula. Curabitur
; egestas tortor sed purus vestibulum auctor. Cras dui metus, euismod sit amet
; suscipit et, cursus ullamcorper felis. Integer elementum condimentum neque, et
; sagittis arcu rhoncus sed. In luctus congue eros, viverra dapibus mi rhoncus
; non. Pellentesque nisl diam, auctor quis sapien nec, suscipit aliquam velit. Nam
; ac nisi justo.
print wordwrap.at: 10 "one two three four five six seven eight nine ten"
; one two
; three four
; five six
; seven 
; eight nine
; ten

System

arg

get command-line arguments as a list

Returns

:block

Examples

; called with no parameters
arg         ; => []

; called with: 1 two 3
arg         ; => ["1" "two" "3"]

args

get all command-line arguments parsed as a dictionary

Returns

:dictionary

Examples

; called with: 1 two 3
args         
; => #[
;     1 
;     "two"
;     3
; ]
; called with switches: -c -b
args 
; => #[
;     c : true
;     b : true
;     values: []
; ]

; called with switches: -c -b and values: 1 two 3
args
; => #[
;     c : true
;     b : true
;     values: [1 "two" 3]
; ]
; called with named parameters: -c:2 --name:newname myfile.txt
args
; => #[
;     c : 2
;     name : "newname"
;     values: ["myfile.txt"]
; ]

config

get local or global configuration

Returns

:store

Examples

; `config` searches for `config.art` into your current directory. 
    ; if not found, it returns from `~/.arturo/stores/config.art`

    config
    ; => []
    ; `config.art` is empty at first, but we can change this manually

    write.append path\home ++ normalize ".arturo/stores/config.art" 
                 "language: {Arturo}"
    config
    ; => []
    
    ; this stills empty, but now try to relaunch Arturo:
    exit
    config
    ; => [language:Arturo]

env

get environment variables

Returns

:dictionary

Examples

print env\SHELL
; /bin/zsh

print env\HOME
; /Users/drkameleon

print env\PATH
; /Users/drkameleon/.arturo/bin:/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

execute

execute given shell command

Arguments

  • command (:string)

Options

  • args (:block): use given command arguments
  • async (:logical): execute asynchronously as a process and return id
  • code (:logical): return process exit code
  • directly (:logical): execute command directly, as a shell command

Returns

:string,:dictionary

Examples

print execute "pwd"
; /Users/admin/Desktop

split.lines execute "ls"
; => ["tests" "var" "data.txt"]

exit

exit program

Returns

:nothing

Examples

exit              ; (terminates the program)

panic

exit program with error message

Arguments

  • message (:string)

Options

  • code (:integer): return given exit code
  • unstyled (:logical): don't use default error template

Returns

:logical

Examples

panic.code:1 "something went terribly wrong. quitting..."
; quits with the given code and 
; prints a properly format error with the given message
panic.unstyled "oops! that was wrong"
; quits with the default exit code (= 0) and
; just outputs a simple - unformatted - message

path

get path information

Returns

:dictionary

Examples

path
        ; => [current:C:\Users\me\my-proj home:C:\Users\me\ temp:C:\Users\me\AppData\Local\Temp\

pause

pause program's execution~for the given amount of time

Arguments

  • time (:integer,:quantity)

Returns

:nothing

Examples

print "wait a moment"

pause 1000      ; sleeping for 1000ms = one second

print "done. let's continue..."
print "waiting for 2 seconds

pause 2:s       ; let's sleep for a while

print "done!"

process

get information on current process/program

Returns

:dictionary

Examples

print process\id
    ; 78046

    inspect process
    ; [ :dictionary
    ;       id      :	78046 :integer
    ;       memory  :	[ :dictionary
    ;           occupied  :		1783104 :integer
    ;           free      :		360448 :integer
    ;           total     :		2379776 :integer
    ;           max       :		2379776 :integer
    ;       ]
    ; ]

script

get embedded information about the current script

Returns

:dictionary

Examples

;; author: {Me :P}
;; year: 2023
;; license: Some License
;; 
;; description: {
;;      This is an example of documentation.
;;
;;      You can get this by using ``script``.
;; }
;;
;; hint: {
;;      Notice that we use `;;` for documentation,
;;      while the single `;` is just a comment, 
;;      that will be ignored.   
;; }
;;
;; export: [
;;    'myFun
;;    'otherFun
;;    'someConst
;; ]
;;

inspect script
; [ :dictionary
;         author       :        Me :P :string
;         year         :        2023 :integer
;         license      :        [ :block
;                 Some :string
;                 License :string
;         ]
;         description  :        This is an example of documentation.
;  
; You can get this by using ``script``. :string
;         hint         :        Notice that we use `;;` for documentation,
; while the single `;` is just a comment, 
; that will be ignored. :string
;         export       :        [ :block
;                 myFun :string
;                 otherFun :string
;                 someConst :string
;         ]
; ]

superuser?

check if current user has administrator/root privileges

Returns

:logical

Examples

; when running as root
superuser?          ; => true

; when running as regular user
superuser?          ; => false

sys

get current system information

Returns

:dictionary

Examples

inspect sys
;[ :dictionary
;        author     :        Yanis Zafirópulos :string
;        copyright  :        (c) 2019-2024 :string
;        version    :        0.9.84-alpha+3126 :version
;        built      :        [ :date
;                hour        :                16 :integer
;                minute      :                19 :integer
;                second      :                25 :integer
;                nanosecond  :                0 :integer
;                day         :                12 :integer
;                Day         :                Wednesday :string
;                days        :                163 :integer
;                month       :                6 :integer
;                Month       :                June :string
;                year        :                2024 :integer
;                utc         :                -7200 :integer
;        ]
;        deps       :        [ :dictionary
;                gmp     :                6.3.0 :version
;                mpfr    :                4.2.1 :version
;                sqlite  :                3.39.5 :version
;                pcre    :                8.45.0 :version
;        ]
;        binary     :        /Users/drkameleon/.arturo/bin/arturo :string
;        cpu        :        [ :dictionary
;                arch    :                amd64 :literal
;                endian  :                little :literal
;                cores   :                8 :integer
;        ]
;        os         :        macos :string
;        hostname   :        drkameleons-MBP.home :string
;        release    :        full :literal
;]

terminate

kill process with given id

Arguments

  • id (:integer)

Options

  • code (:integer): use given error code

Returns

:nothing

Examples

; start process
    pid: execute.async "someProcessThatDoesSomethingInTheBackground"

    ; wait for 5 seconds
    pause 5000 

    ; terminate background process
    terminate pid

Types

attribute?

checks if given value is of type :attribute

Arguments

  • value (:any)

Returns

:logical

Examples

attribute? first [.something x]
; => true

attributeLabel?

checks if given value is of type :attributeLabel

Arguments

  • value (:any)

Returns

:logical

Examples

attributeLabel? first [.something: x]
; => true

binary?

checks if given value is of type :binary

Arguments

  • value (:any)

Returns

:logical

Examples

binary? to :binary "string"
; => true

block?

checks if given value is of type :block

Arguments

  • value (:any)

Returns

:logical

Examples

print block? [1 2 3]            ; true
print block? #[name: "John"]    ; false
print block? "hello"            ; false
print block? 123                ; false

bytecode?

checks if given value is of type :bytecode

Arguments

  • value (:any)

Returns

:logical

Examples

code: [print 1 + 2]
bcode: to :bytecode code

print bytecode? bcode      ; true
print bytecode? code       ; false

char?

checks if given value is of type :char

Arguments

  • value (:any)

Returns

:logical

Examples

print char? `a`         ; true
print char? 123         ; false

color?

checks if given value is of type :color

Arguments

  • value (:any)

Returns

:logical

Examples

print color? #FF0000        ; true
print color? #green         ; true

print color? 123            ; false

complex?

checks if given value is of type :complex

Arguments

  • value (:any)

Returns

:logical

Examples

c: to :complex [1 2]
print complex? c            ; true

print complex? 123          ; false

constructor

create a type constructor method automatically using given arguments

Arguments

  • arguments (:literal,:block)

Returns

:method

Examples

define :cat [
    init: constructor [nick :string]

    meow: method [][
        print [this\nick ":" "'meow!'"
    ]
]

snowflake: to :cat [15]
; Assertion | [is? :string nick]
;     error |

snowflake: to :cat ["Snowflake"]
snowflake\meow
; Snowflake: 'meow!'

database?

checks if given value is of type :database

Arguments

  • value (:any)

Returns

:logical

Examples

database? open "my.db"
; => true

date?

checks if given value is of type :date

Arguments

  • value (:any)

Returns

:logical

Examples

print date? now             ; true
print date? "hello"         ; false

define

define new type with given prototype

Arguments

  • type (:type)
  • prototype (:type,:dictionary,:block)

Returns

:nothing

Examples

; define a simple type
define :person [name surname]

; and create an object
someone: to :person ["John" "Doe"]
print someone       ; [name:John surname:Doe]
; define a simple type
define :person [name surname]

; and create an object
; using a dictionary with field values
someone: to :person #[surname: "Doe", name: "John"]
print someone       ; [name:John surname:Doe]
; define a new type
; with custom constructor

define :person [
    init: method [name, surname, age][
        this\name: name
        this\surname: surname
        this\dob: now\year - age
    ]
]

; create an object
jd: to :person ["John" "Doe" 38]
print jd            ; [name:John surname:Doe dob:1986]
; define type with overloaded
; magic methods
define :natural [
    init: constructor [value]

    ; custom `+` overload
    add: method [x :integer :natural][
        (integer? x)? -> this\value + x
                      -> to :natural @[this\value + x\value]
    ]

    ; custom `to :string` overload
    string: method [][
        to :string this\value
    ]
]

; create two new 'natural' numbers
n1: to :natural @[3]
n2: to :natural @[5]

print n1 + n2           ; 8

defined?

checks if given type is defined

Arguments

  • type (:type,:string,:word,:literal)

Returns

:logical

Examples

defined? :cat
; => false
defined? "cat"
; => false
defined? 'cat
; => false

define :cat [
    init: constructor [name :string age :integer]
]

defined? :cat
; => true
defined? "cat"
; => true
defined? 'cat
; => true

defined? :dog
; => false

dictionary?

checks if given value is of type :dictionary

Arguments

  • value (:any)

Returns

:logical

Examples

print dictionary? #[name: "John"]   ; true
print dictionary? 123               ; false

error?

checks if given value is of type :error

Arguments

  • value (:any)

Returns

:logical

Examples

error? try -> throw "Some Error"
; => true

errorKind?

checks if given value is of type :errorKind

Arguments

  • value (:any)

Returns

:logical

Examples

errorKind? to :errorKind "Some error kind"
; => true
errorKind? genericError
; => true

floating?

checks if given value is of type :floating

Arguments

  • value (:any)

Returns

:logical

Examples

print floating? 3.14        ; true
print floating? 123         ; false
print floating? "hello"     ; false

function?

checks if given value is of type :function

Arguments

  • value (:any)

Options

  • builtin (:logical): check if, internally, it's a built-in

Returns

:logical

Examples

print function? $[x][2*x]       ; true
print function? var 'print      ; true
print function? "print"         ; false
print function? 123             ; false
f: function [x][x+2]

function? var'f                 ; => true
function? var'print             ; => true
function?.builtin var'f         ; => false
function?.builtin var'print     ; => true

inline?

checks if given value is of type :inline

Arguments

  • value (:any)

Returns

:logical

Examples

inline? first [(something) x]
; => true

integer?

checks if given value is of type :integer

Arguments

  • value (:any)

Options

  • big (:logical): check if, internally, it's a bignum

Returns

:logical

Examples

print integer? 123                  ; true
print integer? "hello"              ; false
integer?.big 123                    ; => false
integer?.big 12345678901234567890   ; => true

is

get derivative type with given prototype

Arguments

  • type (:type)
  • prototype (:dictionary,:block)

Returns

:type

Examples

define :animal [
    init: constructor [nick :string age :integer]
    
    speak: method [][
        print "..."
    ]
]

define :fish is :animal []

define :cat is :animal [
    speak: method [][
        print [~"|this\nick|:" "'meow!'"]
    ] 
]                                                   

a: to :cat []
; >> Runtime | cannot initialize object of type :cat
;      error | wrong number of parameters: 0
;            | expected: 2 (nick, age)

scooby: to :animal ["Scooby" 7]
scooby\speak
; ...

bubble: to :fish ["Bubble" 1]            
bubble\speak
; ...

snowflake: to :cat ["Snowflake" 3]
snowflake\speak
; Snowflake: 'meow!'

is?

check whether value is of given type

Arguments

  • type (:type,:block)
  • value (:any)

Returns

:logical

Examples

is? :string "hello"       ; => true
is? :block [1 2 3]        ; => true
is? :integer "boom"       ; => false

is? [:string] ["one" "two"]     ; => true
is? [:integer] [1 "two]         ; => false

label?

checks if given value is of type :label

Arguments

  • value (:any)

Returns

:logical

Examples

label? first [something: x]
; => true

literal?

checks if given value is of type :literal

Arguments

  • value (:any)

Returns

:logical

Examples

print literal? 'x           ; true
print literal? "x"          ; false
print literal? 123          ; false

logical?

checks if given value is of type :logical

Arguments

  • value (:any)

Returns

:logical

Examples

print logical? true         ; true
print logical? false        ; true
print logical? maybe        ; true
print logical? 1=1          ; true
print logical? 123          ; false

method?

checks if given value is of type :method

Arguments

  • value (:any)

Returns

:logical

Examples

greet: method [name :string][print ~"How are you, |name|?"]
reply: function [name :string][print ~"Hi, I'm fine |name|!"]

method? greet
; => true

method? reply
; => false

null?

checks if given value is of type :null

Arguments

  • value (:any)

Returns

:logical

Examples

print null? null            ; true
print null? ø               ; true

print null? 123             ; false

object?

checks if given value is a custom-type object

Arguments

  • value (:any)

Returns

:logical

Examples

define :person [name,surname][]

x: to :person ["John","Doe"]

print object? x             ; true
print object? "hello"       ; false

path?

checks if given value is of type :path

Arguments

  • value (:any)

Returns

:logical

Examples

path? first [a\b\c x]
; => true

pathLabel?

checks if given value is of type :pathLabel

Arguments

  • value (:any)

Returns

:logical

Examples

pathLabel? first [a\b\c: x]
; => true

pathLiteral?

checks if given value is of type :pathLiteral

Arguments

  • value (:any)

Returns

:logical

Examples

pathLiteral? 'a\b\c
; => true

quantity?

checks if given value is of type :quantity

Arguments

  • value (:any)

Options

  • big (:logical): check if, internally, it's a bignum

Returns

:logical

Examples

print quantity? 1:m         ; true
print quantity? 2:yd2       ; true    

print quantity? 3           ; false

range?

checks if given value is of type :range

Arguments

  • value (:any)

Returns

:logical

Examples

r: 1..3                     ; r: [1 2 3]

print range? r              ; true
print range? [1 2 3]        ; false

rational?

checks if given value is of type :rational

Arguments

  • value (:any)

Options

  • big (:logical): check if, internally, it's a bignum

Returns

:logical

Examples

r: to :rational 3.14        ; r: 157/50

print rational? r           ; true
print rational? 3.14        ; false

regex?

checks if given value is of type :regex

Arguments

  • value (:any)

Returns

:logical

Examples

print regex? {/[a-z]+/}     ; true
print regex? "[a-z]+"       ; false
print regex? 123            ; false

socket?

checks if given value is of type :socket

Arguments

  • value (:any)

Returns

:logical

Examples

server: listen 18966
socket? server
; => true

sortable

create a sort descriptor method automatically using given type field

Arguments

  • field (:literal)

Returns

:method

Examples

define :cat [
    init: constructor [name :string age :integer]
    compare: sortable 'age
]

snowflake: to :cat ["Snowflake" 3]
smith: to :cat ["Smith" 6]

compare snowflake smith
; => -1
snowflake < smith
; => true

store?

checks if given value is of type :store

Arguments

  • value (:any)

Returns

:logical

Examples

store? config
; => true

string?

checks if given value is of type :string

Arguments

  • value (:any)

Returns

:logical

Examples

print string? "x"           ; true
print string? 'x            ; false
print string? 123           ; false

symbol?

checks if given value is of type :symbol

Arguments

  • value (:any)

Returns

:logical

Examples

symbol? first [+ x]
; => true

symbolLiteral?

checks if given value is of type :symbolLiteral

Arguments

  • value (:any)

Returns

:logical

Examples

symbolLiteral? '++
; => true

to

convert value to given type

Arguments

  • type (:type,:block)
  • value (:any)

Options

  • format (:string): use given format (for dates or floating-point numbers)
  • unit (:string,:literal): use given unit (for quantities)
  • intrepid (:logical): convert to bytecode without error-line tracking
  • hsl (:logical): convert HSL block to color
  • hsv (:logical): convert HSV block to color

Returns

:any

Examples

to :integer "2020"            ; 2020

to :integer `A`               ; 65
to :char 65                   ; `A`

to :integer 4.3               ; 4
to :floating 4                ; 4.0

to :complex [1 2]             ; 1.0+2.0i

; make sure you're using the `array` (`@`) converter here, since `neg` must be evaluated first
to :complex @[2.3 neg 4.5]    ; 2.3-4.5i

to :rational [1 2]            ; 1/2
to :rational @[neg 3 5]       ; -3/5

to :boolean 0                 ; false
to :boolean 1                 ; true
to :boolean "true"            ; true

to :literal "symbol"          ; 'symbol
to :string 2020               ; "2020"
to :string 'symbol            ; "symbol"
to :string :word              ; "word"

to :string .format:"dd/MM/yy" now
; 22/03/21

to :string .format:".2f" 123.12345
; 123.12
to :block "one two three"       ; [one two three]

do to :block "print 123"        ; 123
to :date 0          ; => 1970-01-01T01:00:00+01:00

print now           ; 2021-05-22T07:39:10+02:00
to :integer now     ; => 1621661950

to :date .format:"dd/MM/yyyy" "22/03/2021"
; 2021-03-22T00:00:00+01:00
to [:string] [1 2 3 4]
; ["1" "2" "3" "4"]

to [:char] "hello"
; [`h` `e` `l` `l` `o`]
define :person [name surname age][]

to :person ["John" "Doe" 35]
; [name:John surname:Doe age:35]
to :color [255 0 10]
; => #FF000A

to :color .hsl [255 0.2 0.4]
; => #5C527A

type

get type of given value

Arguments

  • value (:any)

Returns

:type

Examples

print type 18966          ; :integer
print type "hello world"  ; :string

type?

checks if given value is of type :type

Arguments

  • value (:any)

Returns

:logical

Examples

print type? :string         ; true
print type? "string"        ; false
print type? 123             ; false

unit?

checks if given value is of type :unit

Arguments

  • value (:any)

Returns

:logical

Examples

unit? `m
; => true

version?

checks if given value is of type :version

Arguments

  • value (:any)

Returns

:logical

Examples

print version? 1.0.2        ; true
print version? "1.0.2"      ; false

word?

checks if given value is of type :word

Arguments

  • value (:any)

Returns

:logical

Examples

word? first [something x]
; => true

Ui

alert

show notification with given title and message

Arguments

  • title (:string)
  • message (:string)

Options

  • info (:logical): show informational notification
  • warning (:logical): show notification as a warning
  • error (:logical): show notification as an error

Returns

:nothing

Examples

alert "Hello!" "This is a notification..."
; show an OS notification without any styling

alert.error "Ooops!" "Something went wrong!"
; show an OS notification with an error message

clip

set clipboard content to given text

Arguments

  • content (:string)

Returns

:nothing

Examples

clip "this is something to be pasted into the clipboard"

dialog

show a file selection dialog and return selection

Arguments

  • title (:string)

Options

  • folder (:logical): select folders instead of files
  • path (:string): use given starting path

Returns

:string

Examples

selectedFile: dialog "Select a file to open"
; gets full path for selected file, after dialog closes
selectedFolder: dialog.folder "Select a folder"
; same as above, only for folder selection

popup

show popup dialog with given title and message and return result

Arguments

  • title (:string)
  • message (:string)

Options

  • info (:logical): show informational popup
  • warning (:logical): show popup as a warning
  • error (:logical): show popup as an error
  • question (:logical): show popup as a question
  • ok (:logical): show an OK dialog (default)
  • okCancel (:logical): show an OK/Cancel dialog
  • yesNo (:logical): show a Yes/No dialog
  • yesNoCancel (:logical): show a Yes/No/Cancel dialog
  • retryCancel (:logical): show a Retry/Cancel dialog
  • retryAbortIgnore (:logical): show an Abort/Retry/Ignore dialog
  • literal (:logical): return the literal value of the pressed button

Returns

:logical,:literal

Examples

popup "Hello!" "This is a popup message"
; shows a message dialog with an OK button
; when the dialog is closed, it returns: true
if popup.yesNo "Hmm..." "Are you sure you want to continue?" [
    ; a Yes/No dialog will appear - if the user clicks YES,
    ; then the function will return true; thus we can do what
    ; we want here

]
popup.okCancel.literal "Hello" "Click on a button"
; => 'ok (if user clicked OK)
; => 'cancel (if user clicked Cancel)

unclip

get clipboard content

Returns

:string

Examples

; paste something into the clipboard (optionally)
clip "this is something to be pasted into the clipboard"

; now, let's fetch whatever there is in the clipboard
unclip 
; => "this is something to be pasted into the clipboard"

webview

show webview window with given url or html source

Arguments

  • content (:string,:literal)

Options

  • title (:string): set window title
  • width (:integer): set window width
  • height (:integer): set window height
  • fixed (:logical): window shouldn't be resizable
  • maximized (:logical): start in maximized mode
  • fullscreen (:logical): start in fullscreen mode
  • borderless (:logical): show as borderless window
  • topmost (:logical): set window as always-on-top
  • debug (:logical): add inspector console
  • on (:dictionary): execute code on specific events
  • inject (:string): inject JS code on webview initialization

Returns

:nothing

Examples

webview "Hello world!"
; (opens a webview windows with "Hello world!")
webview .width:  200 
        .height: 300
        .title:  "My webview app"
---
    <h1>This is my webpage</h1>
    <p>
        This is some content
    </p>
---
; (opens a webview with given attributes)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment