Re: My LOOP is ugly

Liste des GroupesRevenir à cl lisp 
Sujet : Re: My LOOP is ugly
De : Nobody447095 (at) *nospam* here-nor-there.org (B. Pym)
Groupes : comp.lang.lisp
Date : 18. Aug 2024, 06:25:34
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v9rt3s$28v2d$1@dont-email.me>
User-Agent : XanaNews/1.18.1.6
Kenny Tilton wrote:

(defun p2b (pairs &key ((:test test) #'eql))
   "((A 1) (A 2) (B 2) (C 2) (C 3)) ==> ((A 1 2) (B 2) (C 2 3))"
   (loop with bunch = nil
         for (one two) in pairs
         do (push two (cdr (or (assoc one bunch :test test)
                             (car (push (list one) bunch)))))
         finally (return bunch)))

newLISP

;; Alter a value in or add a value to an association list.
(macro (ainc! Alist Key Value Function Deflt)
  (local (E-Message Val Func Def)
    (setq Func Function)
    (if (true? Func)
      (setq Val Value)
      (begin (setq Func +) (setq Val (or Value 1))))
    (setq Def Deflt)
    (if (= nil Def) (setq Def 0))
    (unless 
      (catch
        (setf (assoc Key Alist)
          (list ($it 0) (Func Val ($it 1))))
        'E-Message)
      (if (starts-with E-Message "ERR: no reference")
        (setf Alist (cons (list Key (Func Val Def)) Alist))
        (throw E-Message)))))

(define (p2b pairs)
  (let (bunch '())
    (dolist (xs pairs)
      (ainc! bunch (xs 0) (xs 1) cons '()))
    bunch))

(p2b '((A 1) (A 2) (B 2) (C 2) (C 3)))
  ===>
((C (3 2)) (B (2)) (A (2 1)))

Date Sujet#  Auteur
18 Aug 24 o Re: My LOOP is ugly1B. Pym

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal