all repos — min @ a0894a184e135b97649ee65977582137a9f20008

A small but practical concatenative programming language.

lib/prelude.min

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
// Common sigils
[bind]    [:]     sigil 
[getenv]  [$]     sigil 
[system]  [!]     sigil 
[run]     [&]     sigil

// Aliases
'bind        ::
'exit        :quit
'concat      :,
'print       :%
'==          :eq
'!=          :noteq
'>           :gt
'<           :lt
'>=          :gte
'<=          :lte
'puts        :echo
'system      :!
'run         :&
'getenv      :$
'pop         :zap
'quote       :unit
'unquote     :i
'unquote     :apply
'filter      :select
'clear       :empty
'match       :~
["."]        :.
[".."]       :..

// Mathematical Operators
[1 +]           :succ
[1 -]           :pred
[2 mod 0 ==]    :even?
[even? not]     :odd?

[[dup 0 ==] [1 +] [dup 1 -] [ * ] linrec] :factorial

// Stack Operators
[swap cons]                       :swons
[[pop] dip]                       :popd
[[dup] dip]                       :dupd
[[swap] dip]                      :swapd
[[dup] dip i]                     :q
[[zap] dip i]                     :k
[[cons] dip i]                    :b
[[swap] dip i]                    :c
[[dip] cons cons]                 :take
[[] cons dip]                     :dig1
[[] cons cons dip]                :dig2
[[] cons cons cons dip]           :dig3
[[[] cons] dip swap i]            :bury1
[[[] cons cons] dip swap i]       :bury2
[[[] cons cons cons] dip swap i]  :bury3

// Other
[dup unbind bind]                 :rebind