-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathprelude.carp
More file actions
28 lines (25 loc) · 834 Bytes
/
prelude.carp
File metadata and controls
28 lines (25 loc) · 834 Bytes
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
(decl def)
(meta-set! def "dispatches" (list
(fn [name val]
(let [environ (parent (current-env))
val (eval val)]
(do
(eval (list (quote decl) name) environ)
(if (fn? val)
(eval (list (quote meta-set!) name "dispatches" (list (quote list) val)))
(eval (list (quote meta-set!) name "value" val))))))))
(meta-set! def "macro" true)
(def defmacro
(fn [name args body]
(do
(eval (list (quote def) name (list (quote fn) args body)))
(eval (list (quote meta-set!) name "macro" true)))))
(meta-set! defmacro "macro" true)
(defmacro defndynamic [name args body]
(eval (list (quote def) name (list (quote fn) args body))))
(def defmodule
(fn [name form]
(do
(eval (list (quote decl) name))
(eval form name))))
(meta-set! defmodule "macro" true)