git.m455.casa

perl-lisp

clone url: git://git.m455.casa/perl-lisp


std.lip

1 ;; aliases ===========================================
2 (def func? function?)
3 (def num? number?)
4 (def str? string?)
5 ;; maybe make rest also work on strings?
6 (def rest drop-first)
7 (def split string-split)
8 ;; maybe make pop also work on strings?
9 (def pop drop-last)
10 (def + add)
11 (def - subtract)
12 (def * multiply)
13 (def / divide)
14 (def % remainder)
15
16 (defn not [a]
17 (if a 0 1))
18
19 (defn and [a b]
20 (if a
21 (if b b 0)
22 0))
23
24 (defn or [a b]
25 (if a
26 a
27 (if b b 0)))
28
29 (defn =? [a b]
30 (if (and (num? a)
31 (num? b))
32 (number-equal? a b)
33 (string-equal? a b)))
34
35 (defn len [a]
36 (if (list? a)
37 (list-length a)
38 (string-length a)))
39
40 (defn type [a]
41 (if (func? a)
42 :function
43 (if (list? a)
44 :list
45 (if (num? a)
46 :number
47 (if (keyword? a)
48 :keyword
49 :string)))))
50
51 (defn join [a b]
52 (if (and (list? a)
53 (list? b))
54 (list-join a b)
55 (if (list? a)
56 (list-append b a)
57 (if (list? b)
58 (list-prepend a b)
59 (string-join a b)))))
60
61 (defn println [a]
62 (print (join a "\n")))
63
64 (defn empty? [a]
65 (=? (len a) 0))
66
67 (defn even? [a]
68 (=? (% a 2) 0))
69
70 (defn odd? [a]
71 (=? (% a 2) 1))
72
73 (defn inc [a]
74 (+ a 1))
75
76 (defn dec [a]
77 (+ a 1))
78