Raymond Toy pushed to branch issue-240-set-diff-with-hash-table at cmucl / cmucl
Commits:
-
d6aae1fe
by Raymond Toy at 2023-07-26T18:35:56-07:00
-
3fbae4d0
by Raymond Toy at 2023-07-26T18:40:57-07:00
1 changed file:
Changes:
... | ... | @@ -751,14 +751,17 @@ |
751 | 751 | |
752 | 752 | ;; Convert a list to a hashtable. The hashtable does not handle
|
753 | 753 | ;; duplicated values in the list. Returns the hashtable.
|
754 | -(defun list-to-hashtable (list test test-not key)
|
|
754 | +(defun list-to-hashtable (list key test test-not)
|
|
755 | 755 | ;; Don't currently support test-not when converting a list to a hashtable
|
756 | 756 | (unless test-not
|
757 | - (let ((hash-test (case test
|
|
758 | - ((#'eq 'eq) 'eq)
|
|
759 | - ((#'eql 'eq) 'eql)
|
|
760 | - ((#'equal 'equal) 'equal)
|
|
761 | - ((#'equalp 'equalp) 'equalp))))
|
|
757 | + (let ((hash-test (let ((test-fn (if (and (symbolp test)
|
|
758 | + (fboundp test))
|
|
759 | + (fdefinition test)
|
|
760 | + test)))
|
|
761 | + (cond ((eql test-fn #'eq) 'eq)
|
|
762 | + ((eql test-fn #'eql) 'eql)
|
|
763 | + ((eql test-fn #'equal) 'equal)
|
|
764 | + ((eql test-fn #'equalp) 'equalp)))))
|
|
762 | 765 | (unless hash-test
|
763 | 766 | (return-from list-to-hashtable nil))
|
764 | 767 | ;; If the list is too short, the hashtable makes things
|