1 (de load-relative (Path)
2 (load (pack (car (file)) Path)) )
4 (load-relative "readline.l")
5 (load-relative "types.l")
6 (load-relative "reader.l")
7 (load-relative "printer.l")
13 '((+ . ((A B) (MAL-number (+ (MAL-value A) (MAL-value B)))))
14 (- . ((A B) (MAL-number (- (MAL-value A) (MAL-value B)))))
15 (* . ((A B) (MAL-number (* (MAL-value A) (MAL-value B)))))
16 (/ . ((A B) (MAL-number (/ (MAL-value A) (MAL-value B))))) ) )
19 (if (= (MAL-type Ast) 'list)
20 (if (not (MAL-value Ast))
22 (let Value (MAL-value (eval-ast Ast Env))
23 (apply (car Value) (cdr Value)) ) )
24 (eval-ast Ast Env) ) )
26 (de eval-ast (Ast Env)
27 (let Value (MAL-value Ast)
32 (throw 'err (MAL-error (MAL-string (pack "'" Value "' not found")))) ) )
33 (list (MAL-list (mapcar '((Form) (EVAL Form Env)) Value)))
34 (vector (MAL-vector (mapcar '((Form) (EVAL Form Env)) Value)))
35 (map (MAL-map (mapcar '((Form) (EVAL Form Env)) Value)))
42 (PRINT (EVAL (READ String) *ReplEnv)) )
44 (load-history ".mal_history")
48 (let Input (readline "user> ")
51 (let Output (catch 'err (rep Input))
52 (if (isa '+MALError Output)
53 (let Message (MAL-value Output)
54 (unless (= (MAL-value Message) "end of token stream")
55 (prinl "[error] " (pr-str Message)) ) )
56 (prinl Output) ) ) ) ) ) )