Null
[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 defun (name args &rest body)
10   `(progn
11      (eval-when-compile
12        (%compile-defun ',name))
13      (fsetq ,name (lambda ,args ,@body))))
14
15 (defun append (list1 list2)
16   (if (null list1)
17       list2
18       (cons (car list1)
19             (append (cdr list1) list2))))
20
21 (defun reverse-aux (list acc)
22   (if (null list)
23       acc
24       (reverse-aux (cdr list) (cons (car list) acc))))
25
26 (defun reverse (list)
27   (reverse-aux list '()))
28
29 (debug (reverse '(1 2 3 4)))
30
31 ;;; Tests
32
33 (lambda (x y) x)
34
35 (debug "hola")
36 (debug '(1 2 3 4))
37 (debug (if 2 (+ 2 1) 0))
38 (debug (= (+ 2 1) (- 4 1)))
39
40 ;;; Variables
41 (debug "---VARIABLES---")
42 (eval-when-compile
43   (%compile-defvar 'name))
44 (setq name 10)
45 (debug name)
46
47 ;;; Functions
48 (debug "---FUNCTIONS---")
49 (eval-when-compile
50   (%compile-defun 'f))
51 (fsetq f (lambda (x) (+ x 10)))
52 (debug (f 20))
53
54 (debug ((lambda (x) x) 9999))
55
56 (debug #'f)
57
58 ;;; Macros
59 (debug "---MACROS---")
60
61
62
63 (defmacro incf (x)
64   (list 'setq x (list '+ 1 x)))
65
66 (eval-when-compile
67   (%compile-defvar 'x))
68
69 (setq x 10)
70 (incf x)
71 (debug x)
72
73 ;;; Conses
74 (debug (cons 1 2))
75 (debug (car (cons 1 2)))
76 (debug (cdr (cons 1 2)))
77
78 (setq x '(1 . 2))
79 (debug x)
80 (debug (eq x x))
81 (debug (eq '(1 . 2) '(1 . 2)))
82
83 ;;; Symbols
84 (debug (symbol-name 'foo))
85 (debug (symbol-name 'foo-bar))
86
87 (debug (progn 1 2 3 123))
88
89 (debug (let ((x 99999))
90          (incf x)))
91
92 ;;; &rest lambda-list
93
94 (debug (lambda (&rest x) x))
95 (debug (lambda (x y &rest z) z))
96 (debug (lambda (x y &rest z) x))
97
98
99 ;; (eval-when-compile
100 ;;   (%compile-defmacro 'defun
101 ;;                   (lambda (name args &rest body)
102 ;;                     (list 'eval-when-compile
103 ;;                           (list 'compile-defun)
104 ;;                           (list 'fsetq (list 'lambda args (list 'progn body)))))))