home *** CD-ROM | disk | FTP | other *** search
-
- [EVAL.LSP]
- [the LISP function EVAL]
- [January 1, 1981]
-
-
-
- [ASSOC]
- (a ((lambda (0 1)
- (if (eq 0 (car 1)) (cadr 1) (a 0 (cddr 1))))))
-
- [EVAL]
- (e ((lambda (0 2) (cond
- ((atom 0) (a 0 2))
- ((atom (car 0)) (f (car 0) (cdr 0)))
- ((eq (caar 0) (quote lambda))
- (e (cadr (cdar 0)) (v (cadr (car 0)) (cdr 0))))
- ))))
-
- [the most primitive atomic function forms]
- (f ((lambda (0 1) (cond
- ((eq 0 (quote car)) (car (e (car 1) 2)))
- ((eq 0 (quote cdr)) (cdr (e (car 1) 2)))
- ((eq 0 (quote cons)) (cons (e (car 1) 2) (e (cadr 1) 2)))
- ((eq 0 (quote atom)) (atom (e (car 1) 2)))
- ((eq 0 (quote eq)) (eq (e (car 1) 2) (e (cadr 1) 2)))
- ((eq 0 (quote quote)) (car 1))
- ((eq 0 (quote if)) (if (e (car 1) 2) (e (cadr 1) 2)
- (e (car (cddr 1)) 2) ))
- ((and) (g))
- ))))
-
- [convenient atomic function forms]
- (g ((lambda () (cond
- ((eq 0 (quote and)) (n 1))
- ((eq 0 (quote or)) (o 1))
- ((eq 0 (quote not)) (not (e (car 1) 2)))
- ((eq 0 (quote list)) (l 1))
- ((eq 0 (quote append)) (append (e (car 1) 2) (e (cadr 1) 2)))
- ((eq 0 (quote cond)) (m 1))
- ((and) (h))
- ))))
-
- [CAR and CDR composites]
- (h ((lambda () (cond
- ((eq 0 (quote caar)) (car (car (e (car 1) 2))))
- ((eq 0 (quote cadr)) (car (cdr (e (car 1) 2))))
- ((eq 0 (quote cdar)) (cdr (car (e (car 1) 2))))
- ((eq 0 (quote cddr)) (cdr (cdr (e (car 1) 2))))
- ((and) (i))
- ))))
-
- [service functions]
- (i ((lambda () (cond
- ((eq 0 (quote print)) (print (e (car 1) 2)))
- ((eq 0 (quote read)) (read))
- ))))
-
- [EVLIS - evaluate a LIST]
- (l ((lambda (1)
- (if (null 1) 1 (cons (e (car 1) 2) (l (cdr 1)))) )))
-
- [EVCON - evaluate COND]
- (m ((lambda (1)
- (if (e (caar 1) 2) (e (car (cdar 1)) 2) (m (cdr 1))) )))
-
- [EVAND - evaluate an AND]
- (n ((lambda (1)
- (or (null 1) (and (e (car 1) 2) (n (cdr 1)))) )))
-
- [EVOR - evaluate an OR]
- (o ((lambda (1)
- (and (not (null 1)) (or (e (car 1) 2) (o (cdr 1)))) )))
-
- [EVARGS - augment ALIST for LAMBDA]
- (v ((lambda (0 1) (if (null 0) 2
- (cons (car 0) (cons (e (car 1) 2) (v (cdr 0) (cdr 1))))
- ))))
-
- [main program]
- (* (print (e (read) (quote ()))))
-
- [end]
-