621fefc4f9ecfe3c9798210398a5edcbc6f40b40
[fw/altos] / src / lisp / ao_lisp_const.lisp
1                                         ; basic list accessors
2
3
4 (setq cadr (lambda (l) (car (cdr l))))
5 (setq caddr (lambda (l) (car (cdr (cdr l)))))
6 (setq list (lexpr (l) l))
7
8                                         ; evaluate a list of sexprs
9
10 (setq progn (lexpr (l) (last l)))
11
12                                         ; simple math operators
13
14 (setq 1+ (lambda (x) (+ x 1)))
15 (setq 1- (lambda (x) (- x 1)))
16
17                                         ; define a variable without returning the value
18
19 (set 'def (macro (def-param)
20                  (list
21                   'progn
22                   (list
23                    'set
24                    (list
25                     'quote
26                     (car def-param))
27                    (cadr def-param)
28                    )
29                   (list
30                    'quote
31                    (car def-param)
32                    )
33                   )
34                  )
35      )
36
37                                         ; define a set of local
38                                         ; variables and then evaluate
39                                         ; a list of sexprs
40                                         ;
41                                         ; (let (var-defines) sexprs)
42                                         ;
43                                         ; where var-defines are either
44                                         ;
45                                         ; (name value)
46                                         ;
47                                         ; or
48                                         ;
49                                         ; (name)
50                                         ;
51                                         ; e.g.
52                                         ;
53                                         ; (let ((x 1) (y)) (setq y (+ x 1)) y)
54
55 (def let (macro (let-param)
56                 ((lambda (vars exprs make-names make-exprs make-nils)
57                    (progn
58
59                                         ;
60                                         ; make the list of names in the let
61                                         ;
62
63                      (set 'make-names (lambda (vars)
64                                        (cond (vars
65                                               (cons (car (car vars))
66                                                     (make-names (cdr vars))))
67                                              )
68                                        )
69                           )
70                                         ;
71                                         ; the set of expressions is
72                                         ; the list of set expressions
73                                         ; pre-pended to the
74                                         ; expressions to evaluate
75                                         ;
76                      (set 'make-exprs (lambda (vars exprs)
77                                        (progn
78                                          (cond (vars (cons
79                                                       (list set
80                                                             (list quote
81                                                                   (car (car vars))
82                                                                   )
83                                                             (cadr (car vars))
84                                                             )
85                                                       (make-exprs (cdr vars) exprs)
86                                                       )
87                                                      )
88                                                (exprs)
89                                                )
90                                          )
91                                        )
92                           )
93                      (set 'exprs (make-exprs vars exprs))
94
95                                         ;
96                                         ; the parameters to the lambda is a list
97                                         ; of nils of the right length
98                                         ;
99                      (set 'make-nils (lambda (vars)
100                                       (cond (vars (cons nil (make-nils (cdr vars))))
101                                             )
102                                       )
103                           )
104                                         ;
105                                         ; build the lambda.
106                                         ;
107                      (set 'last-let-value 
108                      (cons
109                       (list
110                        'lambda
111                        (make-names vars)
112                        (cond ((cdr exprs) (cons 'progn exprs))
113                              ((car exprs))
114                              )
115                        )
116                       (make-nils vars)
117                       )
118                      )
119                      )
120                      
121                    )
122                  (car let-param)
123                  (cdr let-param)
124                  ()
125                  ()
126                  ()
127                  )
128                 )
129      )