Re: P09

Liste des GroupesRevenir à cl lisp 
Sujet : Re: P09
De : HenHanna (at) *nospam* devnull.tb (HenHanna)
Groupes : comp.lang.lisp
Date : 10. Jun 2024, 01:23:03
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v45dhf$3s5s5$1@dont-email.me>
References : 1
User-Agent : Mozilla Thunderbird
On 6/9/2024 6:32 AM, B. Pym wrote:
P09 (**) Pack consecutive duplicates of list elements into sublists.
    If a list contains repeated elements they should be placed in
   separate sublists.
         Example:
     * (pack '(a a a a b c c a a d e e e e))
     ((A A A A) (B) (C C) (A A) (D) (E E E E))
 Pascal Bourguignon wrote:
 
;; Nice recursive solution:
>
(defun group (list)
   (labels ((group-run (element group list)
              (cond
                ((null list) (list (cons element group)))
                ((eql element (first list)) (group-run element (cons element group) (rest list)))
                (t (cons (cons element group) (group-run (first list) '() (rest list)))))))
     (if (null list)
         '()
         (group-run (first list) '() (rest list)))))
>
>
>
;; Smartass solution, using Common Lisp reduce:
>
(defun group (list)
   (reduce (lambda (item result)
             (cond
               ((endp result)                     (list (list item)))
               ((eql (first (first result)) item) (cons (cons item (first result))
                                                        (rest result)))
               (t                                 (cons (list item) result))))
           list
           :from-end t
           :initial-value '()))
 Gauche Scheme
 (use srfi-1) ;; span
 (define (group lst)
   (if (null? lst)
     '()
     (let-values (((a b) (span (cut equal? (car lst) <>) lst)))
       (cons a (group b)))))
 (group '(2 2 foo bar bar j j j k baz baz))
   ===>
((2 2) (foo) (bar bar) (j j j) (k) (baz baz))
(use srfi-1) ;; span
(define (gp x)
   (if (null? x) '()
     (let-values (((F L) (span (cut equal? (car x) <>) x)))
       (cons F (gp L)))))
(print (gp   '(a    b b    a a a   b b b b)))
(print (gp   '(c c c   a   d d d d   a   e e e e e)))
(define (gpC x)  (map (lambda (x) (list (car x) (length x))) (gp x)))
(print (gpC   '(a    b b    a a a   b b b b)))
(print (gpC   '(c c c   a   d d d d   a   e e e e e)))
There's no way to write     (lambda (x) (list (car x) (length x)))
       using Cut or Cute???

Date Sujet#  Auteur
9 Jun 24 * P092B. Pym
10 Jun 24 `- Re: P091HenHanna

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal