all repos — min @ f7c8ccacbc3c0a2ff5d0ca7bde239e881157ec5a

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
 59
 60
 61
 62
 63
// Common sigils
(bind)    (:)     sigil 
(getenv)  ($)     sigil 
(system)  (!)     sigil 
(run)     (&)     sigil
(import)  (#)     sigil
(define)  (=)     sigil
(load)    (@)     sigil

// Aliases
'bind        ::
'define      :=
'import      :#
'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