anchor.diff:         (=string "with")))
   
   (defun verb-args (verb)
  +  ;; TODO - split into multiple parsers...
     (=or (if (getf verb :transitivep)
  -           (=let* ((direct-objects (noun-clause))
  +           (=let* ((_ (ws))
  +                   (direct-objects (noun-clause))
                      (preposition (maybe (=prog2 (ws) (preposition) (ws))))
                      (indirect-objects (if preposition
                                            (noun-clause)
  
positive.code: (defun sentence ()
    (=let* ((adverb1 (maybe (=prog1 (adverb) (ws)) 'error))
            (verb (verb))
            (verb-args (maybe (=and (ws) (verb-args verb))))
            (adverb2 (maybe (=and (ws) (adverb)) 'error)))
      (result `(:sentence
                ,@verb-args
  
negative.code:            (fail))
         (if (getf verb :ditransitivep)
             (=or
              (=let* ((_ (ws))
                      (direct-objects (noun-clause))
                      (preposition (=prog2 (ws) (preposition) (ws)))
                      (indirect-objects (noun-clause)))
                (result `((:direct-objects . ,direct-objects)
                          (:indirect-objects . ,indirect-objects)
                          (:preposition . ,preposition))))
              (=let* ((_ (ws))
                      (indirect-objects (noun-clause))
                      (_ (ws))
                      (direct-objects (noun-clause)))
                (result `((:direct-objects . ,direct-objects)
                          (:indirect-objects . ,indirect-objects)))))
             (fail))
         (if (getf verb :intransitivep)
             (=let* ((preposition (maybe (=prog2 (ws) (preposition) (ws))))
                     (indirect-objects (if preposition
                                           (noun-clause)
                                           (result nil))))
  