Re: Exercises please

Liste des GroupesRevenir à cl lisp 
Sujet : Re: Exercises please
De : Nobody447095 (at) *nospam* here-nor-there.org (B. Pym)
Groupes : comp.lang.lisp
Date : 21. Jun 2025, 21:26:29
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <10374hj$191qo$1@dont-email.me>
User-Agent : XanaNews/1.18.1.6
Pascal J. Bourguignon wrote:

and my solutions (still incomplete):
http://www.informatimago.com/develop/lisp/l99/index.html

Where we find:

(---------------------------------------------------------------
P13 (**) Run-length encoding of a list (direct solution).

   Example:
    * (encode-direct '(a a a a b c c a a d e e e e))
    ((4 A) B (2 C) (2 A) D (4 E))
"

;; Iterative solution, uses only O(r) space:

(defun encode-modified (list)
  (let ((result    '())
        (count     0)
        (last-item nil))
    (labels ((collect-result ()
               (push (if (= 1 count)
                         last-item
                         (list count last-item))
                     result))
             (new-item (item)
               (setf count 1
                     last-item item))
             (same-item ()
               (incf count))
             (return-result ()
               (when (plusp count)
                 (collect-result))
               (nreverse result)))
      (dolist (item list  (return-result))
        (cond
          ((zerop count)        (new-item item))
          ((eql item last-item) (same-item))
          (t                    (collect-result)
                                (new-item item)))))))
---------------------------------------------------------------)

Gauche Scheme

(define (encode List)
  (if (null? List)
    ()
    (let
      ((tmp (fold
              (lambda(x accum)
                (if (equal? x (caar accum))
                  (cons (cons x (car accum)) (cdr accum))
                  (cons (list x) accum)))
              `((,(car List)))
              (cdr List))))
      (reverse
        (map
          (lambda(xs) (let1 len (length xs)
            (if (= 1 len) (car xs) (list len (car xs)))))
          tmp)))))

gosh> (encode '(a a a a b c c a a d e e e e))
((4 a) b (2 c) (2 a) d (4 e))

Date Sujet#  Auteur
21 Jun 25 * Re: Exercises please2B. Pym
21 Jun 25 `- Re: Exercises please1Kaz Kylheku

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal