anchor.diff:  	     (make-instance 'constant-ast
   			    :form form))
   	    (t
  -	     (assert (proper-list-p form))
  +	     (unless (proper-list-p form)
  +	       (error 'form-must-be-a-proper-list
  +		      :form form))
   	     (make-instance 'compound-ast
   			    :form form
   			    :children (mapcar (lambda (child)
  
positive.code: (defun proper-list-p (list)
    (null (last list 0)))
  
  (define-condition form-is-not-a-proper-list (compilation-program-error) ())
  
  (defun make-ast (form)
    (cond ((symbolp form)
  
negative.code: ;;;
  ;;; Converting let
  
  (define-condition form-must-have-bindings
      (compilation-program-error)
    ())
  
  (define-condition bindings-must-be-a-list
      (compilation-program-error)
    ())
  
  (define-condition binding-must-be-symbol-or-list
      (compilation-program-error)
    ())
  
  (define-condition binding-must-have-length-two
      (compilation-program-error)
    ())
  
  (define-condition variable-must-be-a-symbol
      (compilation-program-error)
    ())    
  
  ;;; FIXME: handle declarations
  (defmethod convert-special ((op (eql 'let)) ast environment)
    (unless (>= (length (children ast)) 2)
      (error 'let-must-have-bindings :form (form ast)))
    (destructuring-bind (binding-asts &rest body-asts) (cdr (children ast))
      (unless (typep binding-asts 'compound-ast)
        (error 'let-bindings-must-be-a-list :form (form binding-asts)))
      (let* ((new-environment (make-instance 'lexical-environment
  					   :parent environment))
  	   (bindings
  	    (loop for binding-ast in (children binding-asts)
  		  do (unless (or (typep binding-ast 'symbol-ast)
  				 (typep binding-ast 'compound-ast))
  		       (error 'let-binding-must-be-symbol-or-list
  			      :form (form binding-ast)))
  		     (when (and (typep binding-ast 'compound-ast)
  				(/= (length (children binding-ast)) 2))
  		       (error 'let-binding-must-have-length-two
  			      :form (form binding-ast)))
  		     (when (and (typep binding-ast 'compound-ast)
  				(= (length (children binding-ast)) 2)
  				(not (typep (car (children binding-ast))
  					    'symbol-ast)))
  		       (error 'variable-must-be-a-symbol
  			      :form (form (car (children binding-ast)))))
  		  collect (make-instance 'binding-ast
  			    :form (form binding-ast)
  			    :variable 
  