Hello, if it's not too late to play
For long lists,
(defun pack-vdh-1 (l / m grp)
(mapcar '(lambda (x1 x2)
(if (= x1 x2)
(setq grp (cons x1 grp))
(setq m (cons grp m)
grp (list x1)
)
)
)
l
(cons (car l) l)
)
(if l
(reverse (cons grp m))
)
)
A recursive version with accumulator
(defun pack-vdh-2 (l)
(if l
((lambda (x m)
(if (= x (caar m))
(cons (cons x (car m)) (cdr m))
(cons (list x) m)
)
)
(car l)
(pack-vdh-2 (cdr l))
)
)
)
The same when looking for optimization
(defun pack-vdh-3 (l / m)
(if l
(if (= (car l) (cadr l))
(cons (cons (car l) (car (setq m (pack-vdh-3 (cdr l))))) (cdr m))
(cons (list (car l)) (pack-vdh-3 (cdr l)))
)
)
)