4 (%compile-defmacro 'defmacro
5 (lambda (name args &rest body)
7 (%compile-defmacro ',name (lambda ,args ,@body))))))
9 (defmacro defvar (name value)
12 (%compile-defvar ',name))
18 (defmacro defun (name args &rest body)
21 (%compile-defun ',name))
22 (fsetq ,name (lambda ,args ,@body))))
24 (defun = (x y) (= x y))
25 (defun + (x y) (+ x y))
26 (defun - (x y) (- x y))
27 (defun * (x y) (* x y))
28 (defun / (x y) (/ x y))
29 (defun 1+ (x) (+ x 1))
30 (defun 1- (x) (- x 1))
31 (defun zerop (x) (= x 0))
32 (defun not (x) (if x nil t))
34 (defun truncate (x y) (floor (/ x y)))
36 (defun cons (x y ) (cons x y))
37 (defun car (x) (car x))
38 (defun caar (x) (car (car x)))
39 (defun cadr (x) (car (cdr x)))
40 (defun cdr (x) (cdr x))
41 (defun cdar (x) (cdr (car x)))
42 (defun cddr (x) (cdr (cdr x)))
44 (defun append (list1 list2)
48 (append (cdr list1) list2))))
50 (defun reverse-aux (list acc)
53 (reverse-aux (cdr list) (cons (car list) acc))))
56 (reverse-aux list '()))
58 (defun mapcar (func list)
61 (cons (funcall func (car list))
62 (mapcar func (cdr list)))))
64 (defmacro push (x place)
65 `(setq ,place (cons ,x ,place)))
67 (defvar *package* (new))
70 (let ((s (get *package* name)))
73 (set *package* name (make-symbol name)))))
75 (defun find-symbol (name)
79 (defmacro cond (&rest clausules)
82 (if (eq (caar clausules) t)
83 `(progn ,@(cdar clausules))
84 `(if ,(caar clausules)
85 (progn ,@(cdar clausules))
86 (cond ,@(cdr clausules))))))
88 (defun !reduce (func list initial)
93 (funcall func initial (car list)))))
96 (defun code-char (x) x)
97 (defun char-code (x) x)
98 (defvar *newline* (string (code-char 10)))
100 (defun concat (&rest strs)
101 (!reduce (lambda (s1 s2) (concat-two s1 s2))
105 ;;; Concatenate a list of strings, with a separator
106 (defun join (list separator)
115 (join (cdr list) separator)))))
117 (defun join-trailing (list separator)
120 (concat (car list) separator (join-trailing (cdr list) separator))))
122 (defun integer-to-string (x)
127 (push (mod x 10) digits)
128 (setq x (truncate x 10)))
129 (join (mapcar (lambda (d) (string (char "0123456789" d)))
133 (debug (integer-to-string 323))