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 |
|