Too many intermediate lazy-seqs added by DeeEff on Wed Jul 15 22:20:46 2015

(define (alt-graph-match G1 G2 gteq? semantic-feasibility?)
  (let match-loop ([s (make-set)])
   (cond
     [(set= (set-map cdr s)
            (graph-vertices G2))
      s]
     [else
      (lazy-flatten
        (lazy-seq
          (let candidate-loop ([c-pairs (candidate-pairs G1 G2 s)]
                               [matchings (lazy-seq '())])
            (if (null? c-pairs)
              matchings
              (let ([n (caar c-pairs)]
                    [m (cdar c-pairs)])
                (if (and (syntactic-feasibility? G1 G2 s n m gteq?)
                         (semantic-feasibility? G1 G2 s n m))
                  (candidate-loop (cdr c-pairs)
                                  (lazy-seq (cons (match-loop (set-union s (set (cons n m))))
                                                  matchings)))
                  (candidate-loop (cdr c-pairs) matchings)))))))])))