Deutsch English Français Italiano |
<vatj2b$m815$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: "B. Pym" <Nobody447095@here-nor-there.org> Newsgroups: comp.lang.lisp,comp.lang.scheme Subject: Re: getting list of keys Date: Fri, 30 Aug 2024 23:02:36 -0000 (UTC) Organization: A noiseless patient Spider Lines: 53 Message-ID: <vatj2b$m815$1@dont-email.me> References: <vath1c$ltbf$1@dont-email.me> Injection-Date: Sat, 31 Aug 2024 01:02:37 +0200 (CEST) Injection-Info: dont-email.me; posting-host="c51450164ff44e4b4c9e62a2e4bb2981"; logging-data="729125"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19dcVM++E5DgWj0xZZ/RJDp" User-Agent: XanaNews/1.18.1.6 Cancel-Lock: sha1:z6rJMTSN070JQ/QS+FCfhVK4LQY= Bytes: 2240 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))