                                           complement-candidate-lexemes))))
                
         bolt-child-synsem (get-in bolt (concat path [:synsem]))
-        lexical-complements (shuffle
+        lexical-complements (lazy-seq
+                             (shuffle
                              (filter (fn [lexeme]
                                        (and (not-fail? (unify (get-in lexeme [:synsem] :top)
                                                               bolt-child-synsem))))
-                                     complement-candidate-lexemes))]
+                                     complement-candidate-lexemes)))]
     (log/debug (str "lexical-complements (post-over):"
                     (string/join ","
                                  (map #((:morph language-model) %)

                                        
;; during generation, will not decend deeper than this when creating a tree:
;; TODO: should also be possible to override per-language.
(def ^:const max-total-depth 6)

;; TODO support setting max-generated-complements to :unlimited
(def ^:const max-generated-complements 20000)

                                  (log/trace (str "trying parent: " (:rule parent) " with lexical head:"
                                                  ((:morph language-model) %)))
                                  (over/overh parent %))
                               (lazy-seq (shuffle subset)))]
                   (if (and (not (empty? subset)) (empty? result)
                            (> (count subset)
                               50))
