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)))))))])))