Rewrite *newline* without literal string
[jscl.git] / test.lisp
1 ;;; Library
2
3 (eval-when-compile
4   (%compile-defmacro 'defmacro
5      (lambda (name args &rest body)
6        `(eval-when-compile
7           (%compile-defmacro ',name (lambda ,args ,@body))))))
8
9 (defmacro defvar (name value)
10   `(progn
11      (eval-when-compile
12        (%compile-defvar ',name))
13      (setq ,name ,value)))
14
15 (defmacro defun (name args &rest body)
16   `(progn
17      (eval-when-compile
18        (%compile-defun ',name))
19      (fsetq ,name (lambda ,args ,@body))))
20
21 (defun = (x y) (= x y))
22 (defun + (x y) (+ x y))
23 (defun - (x y) (- x y))
24 (defun * (x y) (* x y))
25 (defun / (x y) (/ x y))
26 (defun 1+ (x) (+ x 1))
27 (defun 1- (x) (- x 1))
28 (defun cons (x y ) (cons x y))
29 (defun car (x) (car x))
30 (defun cdr (x) (cdr x))
31
32 (defun append (list1 list2)
33   (if (null list1)
34       list2
35       (cons (car list1)
36             (append (cdr list1) list2))))
37
38 (defun reverse-aux (list acc)
39   (if (null list)
40       acc
41       (reverse-aux (cdr list) (cons (car list) acc))))
42
43 (defun reverse (list)
44   (reverse-aux list '()))
45
46 (defun mapcar (func list)
47   (if (null list)
48       '()
49       (cons (funcall func (car list))
50             (mapcar func (cdr list)))))
51
52 (defmacro push (x place)
53   `(setq ,place (cons ,x ,place)))
54
55 (defvar *package* (new))
56
57 (defun intern (name)
58   (let ((s (get *package* name)))
59     (if s
60         s
61         (set *package* name (make-symbol name)))))
62
63 (defun find-symbol (name)
64   (get *package* name))