Sujet : Re: getting list of keys
De : Nobody447095 (at) *nospam* here-nor-there.org (B. Pym)
Groupes : comp.lang.lisp comp.lang.schemeDate : 31. Aug 2024, 01:02:36
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vatj2b$m815$1@dont-email.me>
References : 1
User-Agent : XanaNews/1.18.1.6
B. Pym wrote:
an `update' function for the mp3 database.
I need a function for doing something like this with a list:
* (xxxx (list :artist "something" :song "sss"))
=> (:artist :song)
Thanks in advance, and sorry for my bad english.
--
Pablo.
CL-USER> (loop :for (x y) :on (list :artist "something" :song "sss") :by #'cddr
:collect x)
(:ARTIST :SONG)
Gauche Scheme and Racket using unfold from SRFI-1.
(use srfi-1) ;; unfold for Gauche
or
(require srfi/1) ;; unfold for Racket
(unfold null? car cddr '(:artist "something" :song "sss"))
===>
(:artist :song)
Rob Warnock wrote:
The one place I find myself frequently using CDD*R
is in destructuring lists by "gulps" in LOOP, e.g.:
> (defun group-by-triples (list)
(loop for (a b c) on list by #'cdddr
collect (list a b c)))
GROUP-BY-TRIPLES
> (group-by-triples '(0 1 2 3 4 5 6 7 8 9 10 11 12))
((0 1 2) (3 4 5) (6 7 8) (9 10 11) (12 NIL NIL))
Gauche Scheme
(use srfi-1) ;; unfold
"take*" and "drop*" are tolerant; they don't raise an
exception when the list is too short.
(define (group-by-triples xs)
(unfold null? (cut take* <> 3 #t) (cut drop* <> 3) xs))
(group-by-triples (iota 13))
===>
((0 1 2) (3 4 5) (6 7 8) (9 10 11) (12 #f #f))