From 8b4bf1386d0f493f23f80197945abf921738ef6e Mon Sep 17 00:00:00 2001 From: Qiantan Hong Date: Tue, 21 Apr 2026 00:42:28 -0700 Subject: [PATCH] optimize sum-linear-expressions --- src/expressions.lisp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/expressions.lisp b/src/expressions.lisp index c7be4c1..7eb95ff 100644 --- a/src/expressions.lisp +++ b/src/expressions.lisp @@ -5,7 +5,9 @@ :linear-programming/conditions) (:import-from :alexandria #:if-let - #:plist-alist) + #:plist-alist + #:alist-hash-table + #:hash-table-alist) (:export #:scale-linear-expression #:sum-linear-expressions #:parse-linear-expression @@ -24,13 +26,11 @@ (declaim (inline sum-linear-expressions)) (defun sum-linear-expressions (&rest exprs) "Takes linear expressions and reduces it into a single expression." - (let ((sum (copy-alist (first exprs)))) + (let ((sum (alist-hash-table (first exprs)))) (iter (for expr in (rest exprs)) (iter (for term in expr) - (if-let (pair (assoc (car term) sum)) - (incf (cdr pair) (cdr term)) - (push (cons (car term) (cdr term)) sum)))) - sum)) + (incf (gethash (car term) sum 0) (cdr term)))) + (hash-table-alist sum))) (declaim (inline scale-linear-expression))