# HG changeset patch # User Steve Losh # Date 1468615412 0 # Node ID 9d42a27624fd01ea8f4480452133c1f3711ee3ea # Parent 82413ba524d80ab238c825c83506e613cf708884 `tree-collect` is slow and conses a ton diff -r 82413ba524d8 -r 9d42a27624fd src/wam/compiler/0-data.lisp --- a/src/wam/compiler/0-data.lisp Fri Jul 15 20:28:10 2016 +0000 +++ b/src/wam/compiler/0-data.lisp Fri Jul 15 20:43:32 2016 +0000 @@ -109,9 +109,16 @@ (anonymous-vars nil :type list)) -(defun find-variables (terms) +(defun* find-variables ((terms list)) "Return the set of variables in `terms`." - (remove-duplicates (tree-collect #'variablep terms))) + (let ((variables nil)) + (recursively ((term terms)) + (cond + ((variablep term) (pushnew term variables)) + ((consp term) (recur (car term)) + (recur (cdr term))) + (t nil))) + variables)) (defun find-shared-variables (terms) "Return the set of all variables shared by two or more terms." @@ -165,7 +172,8 @@ (progn (push term seen) (push term once)))) ((consp term) (recur (car term)) - (recur (cdr term))))) + (recur (cdr term))) + (t nil))) once))