Re: Inverting alists -- *NOT* a homework assignment!!

Liste des GroupesRevenir à cl scheme 
Sujet : Re: Inverting alists -- *NOT* a homework assignment!!
De : Nobody447095 (at) *nospam* here-nor-there.org (B. Pym)
Groupes : comp.lang.lisp comp.lang.scheme
Date : 19. Sep 2024, 14:30:54
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vch5hr$ijn1$1@dont-email.me>
User-Agent : XanaNews/1.18.1.6
Christopher N. Vogt wrote:

;; Hi.  I would like to invert an alist of the form ;; ;; ((reference-1
referent-a referent-b...) (reference-2 referent-c ...)...) ;; ;; to
another alist of the form ;; ;; ((referent-a reference-1) (referent-b
reference-1) ;;  (referent-c reference-2) ...) ;; ;; I have gotten
something to work but it's so stupefyingly *UGLY* that I ;; just know
someone out there can demonstrate a more better beautiful ;; elegant
means of achieving the same result. ;; ;; [ I'm working in emacs-lisp
with the 'cl' package, so the code below ;; ought to be reasonably close
to Common Lisp...] ;; ;; ;; Mind you, I am teaching myself lisp and THIS

....

I'd do it something like this:
(defun invert-alist (alist)
   (loop for list in test
         for reference = (first list)
         appending (loop for referent in (cdr list)
                         collect (list referent reference))))

Gauche Scheme

(define (invert-alist alist)
  (@ append-map xs :
    (map (cut  list <> (car xs)) (cdr xs)) :
    alist))

Given:

(define-syntax @-aux
  (syntax-rules (:)
    ;; No parameters given; use "cut".
    [(_ func () ((e0 e ...)) : stuff ...)
     (func (cut e0 e ...) stuff ...)]
    [(_ func vars (e0 e ...) : stuff ...)
     (func (lambda vars e0 e ...) stuff ...)]
    [(_ func vars (e0 e ...) expr more ...)
     (@-aux func vars (e0 e ... expr) more ...)]
    [(_ func vars () : expr more ...)
     (@-aux func vars (expr) more ...)]
    [(_ func (vars ...) () var more ...)
     (@-aux func (vars ... var) () more ...)]
))

(define-syntax @
  (syntax-rules ()
    [(_ func stuff ...)
     (@-aux func () () stuff ...)]))

Date Sujet#  Auteur
19 Sep14:30 o Re: Inverting alists -- *NOT* a homework assignment!!1B. Pym

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal