• Re: getting list of keys

    From B. Pym@21:1/5 to All on Fri Aug 30 22:27:57 2024
    XPost: comp.lang.scheme

    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)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From B. Pym@21:1/5 to B. Pym on Fri Aug 30 23:02:36 2024
    XPost: comp.lang.scheme

    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))

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)