Hi Thomas, > Failing example: > (map > car > (cons '(a b c) (cons '(1 2 3) '(x y z))))
> One way to make it work is to convert the initial pair (cons '(1 2 3) > '(x y z)) to a list of lists, i.e (cons '(1 2 3) (list '(x y z))) > The question is: is it the only and/or best way? It sounds a lot cleaner to me, because, in the end, it is as if: (cons '(a b c) (cons '(1 2 3) (cons '(x y z) '()))) which is 'consistent all the way down, so to speak, and will let you use build-in scheme ops like map, fold, ... If you want to keep the original structure though, I'd use (ice-9 match) and recurse: (use-modules (ice-9 match)) (define blue (cons '(a b c) (cons '(1 2 3) '(x y z)))) (define (blue-walk blue proc) (let loop ((blue blue) (result '())) (match blue ((x y z) (reverse! (cons x result))) ((a . rest) (loop rest (cons (proc a) result)))))) scheme@(guile-user)> (load "blue.scm") ;;; compiling /usr/alto/projects/guile/blue.scm ;;; compiled /home/david/.cache/guile/ccache/2.2-LE-8-3.A/usr/alto/projects/guile/blue.scm.go scheme@(guile-user)> (blue-walk blue car) $8 = (a 1 x) Note that the above will only work if the last 'blue item' has 3 elements, you'd need to adapt for other use case (which also 'speak' in favor of the cleaner approach. David
pgpE8DMTMeHFF.pgp
Description: OpenPGP digital signature
_______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user