用于对整数排序列表进行分组的惯用法?

ink*_*pen 3 lisp common-lisp

我有一个整数的排序列表,(1 2 4 5 6 6 7 8 10 10 10).我想将它们分组,以便我得到((1) (2) (4) (5) (6 6) (7) (8) (10 10 10)).

到目前为止,我有这个,它有效:

(let ((current-group (list)) (groups (list)))
  (dolist (n *sorted*)
    (when (and (not (null current-group)) (not (eql (first current-group) n)))
      (push current-group groups)
      (setf current-group (list)))
    (push n current-group))
  (push current-group groups)
  (nreverse groups))
Run Code Online (Sandbox Code Playgroud)

但我确信必须有更多的LISPy方法来做到这一点.有任何想法吗?

Rai*_*wig 5

没那么糟.我会这样写:

(defun group (list)
  (flet ((take-same (item)
           (loop while (and list (eql (first list) item))
                 collect (pop list))))
    (loop while list
          collect (take-same (first list)))))


CL-USER 1 > (group '(1 2 4 5 6 6 7 8 10 10 10))
((1) (2) (4) (5) (6 6) (7) (8) (10 10 10))
Run Code Online (Sandbox Code Playgroud)