; Author: Ben Kero ; Assignment 3 ; Class: CS381 ; Date: 20090427 (defun myEval (lst) (cond ((numberp lst) lst) ((eq t lst) t) ((eq lst nil) nil) ((eq (car lst) 'quote) (car (cdr lst))) ((eq (car lst) 'cond) (evalCond (cdr lst))) ((listp lst) (myApply (car lst) (myMap #'myEval (cdr lst)))) (t nil) ) ) ; myApply (defun myApply (fun lst) (cond ((atom fun) (cond ((eq fun 'car) (car (car lst))) ((eq fun 'cdr) (cdr (car lst))) ((eq fun 'atom) (atom (car lst))) ((eq fun 'null) (null (car lst))) ((eq fun 'numberp) (numberp (car lst))) ((eq fun 'cons) (cons (car lst) (car (cdr lst)))) ((eq fun 'eq) (eq (car lst) (car (cdr lst)))) ((eq fun '+) (myReduce #'+ 0 lst)) ((eq fun '<) (< (car lst) (car (cdr lst)))) (t nil) ) ) ) ) (defun mapAll (fun list) (cond ((null list) list) ((atom list) (funcall fun list)) ((listp list) (cons (mapAll fun (car list)) (mapAll fun (cdr list)) ) ) ) ) (defun myMap (fun list) (if (null list) nil (cons (funcall fun (car list)) (myMap fun (cdr list))))) (defun myReduce (fun ident list) (if (null list) ident (apply fun (cons (car list) (cons (myReduce fun ident (cdr list)) nil))) ) ) ; evalCond (defun evalcond (lst) (cond ((null lst) nil) ((myEval (car (car lst))) (myEval (car (cdr (car lst))))) (t (evalcond (cdr lst)))))