4 (setq cadr (lambda (l) (car (cdr l))))
5 (setq caddr (lambda (l) (car (cdr (cdr l)))))
6 (setq list (lexpr (l) l))
8 ; evaluate a list of sexprs
10 ;(setq progn (lexpr (l) (last l)))
14 ; Define a variable without returning the value
15 ; Useful when defining functions to avoid
16 ; having lots of output generated
19 (setq def (macro (def-param)
37 ; define a set of local
38 ; variables and then evaluate
41 ; (let (var-defines) sexprs)
43 ; where var-defines are either
53 ; (let ((x 1) (y)) (setq y (+ x 1)) y)
55 (def let (macro (let-param)
56 ((lambda (vars exprs make-names make-exprs make-nils)
60 ; make the list of names in the let
63 (setq make-names (lambda (vars)
65 (cons (car (car vars))
66 (make-names (cdr vars))))
71 ; the set of expressions is
72 ; the list of set expressions
74 ; expressions to evaluate
76 (setq make-exprs (lambda (vars exprs)
85 (make-exprs (cdr vars) exprs)
93 (setq exprs (make-exprs vars exprs))
96 ; the parameters to the lambda is a list
97 ; of nils of the right length
99 (setq make-nils (lambda (vars)
100 (cond (vars (cons nil (make-nils (cdr vars))))
111 (cond ((cdr exprs) (cons 'progn exprs))
129 ; A slightly more convenient form
130 ; for defining lambdas.
132 ; (defun <name> (<params>) s-exprs)
135 (def defun (macro (defun-param)
136 (let ((name (car defun-param))
137 (args (cadr defun-param))
138 (exprs (cdr (cdr defun-param))))
155 ; simple math operators
157 ; Do these last to run defun
158 ; at least once so the let macro
161 (defun 1+ (x) (+ x 1))
162 (defun 1- (x) (- x 1))