a
(defmacro npush-pop (source target)
"Like (push (pop SOURCE) TARGET) but reuse the cons cell, and return nil."
`(cl-rotatef ,source (cdr ,source) ,target))
Size: a a a
a
DL
DL
Aß
¥
V(
Aß
Aß
(defun mlist->alist (keyp mlist)
(cl-assert (funcall keyp (car mlist)) t)
(let (alist)
(while mlist
(let ((value (list (pop mlist))))
(while (and mlist (not (funcall keyp (car mlist))))
(push (pop mlist) value))
(push (nreverse value) alist)))
(nreverse alist)))
A
A
Aß
y
(benchmark-run-compiled 500
(seq-reduce
(lambda (acc el)
(if (< 5 (length (symbol-name (car el))))
(cons (list el) acc)
(cons (append (car acc) (list el))
(cdr acc))))
package-archive-contents
'()))
;; => (1.654912268 7 1.1712598689999822)
(benchmark-run-compiled 500
(let (values alist)
(dolist (x (reverse package-archive-contents) alist)
(push x values)
(when (< 5 (length (symbol-name (car x))))
(push values alist)
(setf values nil)))))
;; => (1.965602425 10 1.6359300010000197)
(benchmark-run-compiled 500
(let ((list (reverse package-archive-contents)) alist values)
(while list
(cl-rotatef list (cdr list) values)
(when (< 5 (length (symbol-name (car (car values)))))
(push values alist)
(setf values nil)))
alist))
;; => (1.310875462 6 0.9877555929999744)
(defun mlist->alist (keyp mlist)
(cl-assert (funcall keyp (car mlist)) t)
(let (alist)
(while mlist
(let ((value (list (pop mlist))))
(while (and mlist (not (funcall keyp (car mlist))))
(push (pop mlist) value))
(push (nreverse value) alist)))
(cl-assert (null mlist) t)
(nreverse alist)))
(benchmark-run-compiled 500
(mlist->alist (lambda (el) (< 5 (length (symbol-name (car el)))))
package-archive-contents))
;; => (12.662998667 65 9.843178946000023)
Aß
Aß
Aß
y
Aß