Discussion:
getting list of keys
Add Reply
B. Pym
2024-08-30 22:27:57 UTC
Reply
Permalink
an `update' function for the mp3 database.
* (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)
B. Pym
2024-08-30 23:02:36 UTC
Reply
Permalink
Post by B. Pym
an `update' function for the mp3 database.
* (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)
The one place I find myself frequently using CDD*R
(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))

Loading...