anchor.diff:  
   (defpackage #:fexpr-clutter (:use :cl :alexandria))
   (in-package #:fexpr-clutter)
  +
  +(defstruct env
  +  parent bindings)
   
   (defun clutter-eval (expression environment)
     (cond ((symbolp expression) (eval/symbol expression environment))
  
positive.code:       (funcall (clutter-operator-function operator) env args)
        (error "Not a function: ~A." operator)))
  
  (defparameter *initial-env*
    (list (cons '+ (make-clutter-operator
                    :function (lambda (*denv* values)
                                (reduce #'+ (mapcar (rcurry #'clutter-eval *denv*)
                                                    values)))))
          (cons 'car (make-clutter-operator
                      :function (lambda (*denv* values)
                                  (car (clutter-eval (car values) *denv*)))))
          (cons 'eval (make-clutter-operator
                       :function (lambda (*denv* values)
                                   (let ((values (mapcar (rcurry #'clutter-eval *denv*)
                                                         values)))
                                     (clutter-eval (first values) (second values))))))
          (cons 'get-current-env
                (make-clutter-operator
                 :function (lambda (*denv* values)
                             (declare (ignore values))
                             *denv*)))
          (cons 'vau
                (make-clutter-operator
                 :function (lambda (static-env values)
                             (destructuring-bind (env-var lambda-var &rest body)
                                 values
                               (make-clutter-operator
                                :function
                                (lambda (*denv* values)
                                  (let ((env (extend static-env
                                                     (list env-var lambda-var)
                                                     (list *denv* values))))
                                    (loop for sexp in body
                                       for last-value = (clutter-eval sexp env)
                                       finally (return last-value)))))))))))
  
negative.code:   (make-clutter-operator 
     :function
     (lambda (*denv* values)
       (let ((env (make-child-env env variables values)))
         (loop for sexp in body
            for last-value = (clutter-eval sexp env)
            finally (return last-value))))))
  