anchor.diff:    (evaluate-term sy))
   
   (defun cmd-prefix-parts (prefix)
  +  "Given a cmd-prefix, separate it into the 2 things it
  +describes (variable assignments and io redirects)."
     (with-slots (io-redirect assignment-word cmd-prefix-tail) prefix
       (multiple-value-bind (assignments redirects)
           (when cmd-prefix-tail
  
positive.code:       (make-thread #'async-eval))))
  
  (defun exit-true-p (exit-thing)
    (zerop exit-thing))
  
  (defun exit-false-p (exit-thing)
    (not (exit-true-p exit-thing)))
  
  (defun invert-exit-status (exit-thing)
    (if (exit-true-p exit-thing)
        1
        0))
  
  (defun truthy-exit-status ()
    0)
  
  (defun exit-status (&key pid exit-code exit-signal stop-signal)
    (declare (ignore pid))
    (+ (if exit-code exit-code 0) (if exit-signal 128 0) (if stop-signal 128 0)))
  
  (defgeneric evaluate (syntax-tree))
  
  (defmethod evaluate (sy)
    (error 'not-implemented :message (format nil "Cannot eval ~A" (class-name (class-of sy)))))
  
negative.code:                (bind-fd +pipe-write-fd+ write-end))
               (evaluate-async-job (aref vector index)
                                   (lambda (result) (store index result))))))
        ;; Produce a vector containing all the elements of the pipeline
        (visit sy)
        (assert (< 1 (length vector)))
  
        ;; Run each command in the pipeline
        (loop :for index :from (- (length vector) 1) :downto 1 :do
           (multiple-value-bind (read-end write-end) (pipe-retained)
             (run-command index read-end write-fd)
  