Raymond Toy pushed to branch issue-240-set-diff-with-hash-table at cmucl / cmucl
Commits:
-
f9485d08
by Raymond Toy at 2023-06-19T12:46:39-07:00
1 changed file:
Changes:
... | ... | @@ -744,6 +744,8 @@ |
744 | 744 | list
|
745 | 745 | (cons item list)))
|
746 | 746 | |
747 | +(defparameter *min-list-length-for-hashtable*
|
|
748 | + 15)
|
|
747 | 749 | |
748 | 750 | ;; Convert a list to a hashtable. Given 2 lists, find the shorter of
|
749 | 751 | ;; the two lists and add the shorter list to a hashtable.
|
... | ... | @@ -768,7 +770,7 @@ |
768 | 770 | (return (values length list1)))
|
769 | 771 | ((null l2)
|
770 | 772 | (return (values length list2))))))
|
771 | - (when (< len 15)
|
|
773 | + (when (< len *min-list-length-for-hashtable*)
|
|
772 | 774 | (return-from list-to-hashtable (values nil nil)))
|
773 | 775 | (cond ((eq shorter-list list2)
|
774 | 776 | (let ((hashtable (make-hash-table :test test :size len)))
|
... | ... | @@ -869,9 +871,9 @@ |
869 | 871 | ;; list2 was placed in hash table.
|
870 | 872 | (let (diff)
|
871 | 873 | (dolist (item list1)
|
872 | - (unless (gethash (apply-key key item) hashtable)
|
|
874 | + (unless (nth-value 1 (gethash (apply-key key item) hashtable))
|
|
873 | 875 | (push item diff)))
|
874 | - (nreverse diff)))
|
|
876 | + diff))
|
|
875 | 877 | ((eq shorter-list list1)
|
876 | 878 | ;; list1 was placed in the hash table.
|
877 | 879 | (dolist (item list2)
|