Skip to content

Instantly share code, notes, and snippets.

@daniel-cussen
Created February 23, 2011 17:53
Show Gist options
  • Save daniel-cussen/840812 to your computer and use it in GitHub Desktop.
Save daniel-cussen/840812 to your computer and use it in GitHub Desktop.
#'eval., #'evcon., and #'evlis.
(defun eval. (e a)
(cond
((atom e) (assoc. e a (minus1. (length. a '()))))
((atom (car e))
(cond
((eq (car e) 'quote) (caadr e))
((eq (car e) 'atom) (atom (eval. (caadr e) a)))
((eq (car e) 'eq) (eq (eval. (caadr e) a)
(eval. (cdadr e) a)))
((eq (car e) 'car) (car (eval. (caadr e) a)))
((eq (car e) 'cdr) (cdr (eval. (caadr e) a)))
((eq (car e) 'cons) (cons (eval. (caadr e) a)
(eval. (cdadr e) a)))
((eq (car e) 'cond) (evcon. (cdr e) a '()))
('t (eval. (cons (assoc. (car e) a (minus1. (length. a '())))
(cdr e)) a))))
((eq (caar e) 'label)
(eval. (cons (cdadar e) (cdr e))
(g-add. (cons (caadar e) (car e)) a '() (length. a '()))))
((eq (caar e) 'lambda)
(eval. (cdadar e)
(append. a (pair. '() (caadar e) (evlis. (append. '() e '(1)) a '()) '()) '())))))
(defun evcon. (glf a x)
(cond ((eval. (car (g-nth. x glf '())) a) (eval. (cdr (g-nth. x glf '())) a))
('t (evcon. glf a (plus1. x)))))
(defun evlis. (glf a x)
(cond ((eqnum. x (length. glf '()))
'())
('t (append. (cons (eval. (g-nth. x glf '()) a) '()) (evlis. glf a (plus1. x)) '()))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment