Hi David, > \version "2.19" > > some-music = { a'4 bes' b' aes' g' cis' d' ees' fis' f' e' c' } > > #(define (zip . xss) (apply map list xss)) > > #(define-markup-command (pitch-info layout props args) (ly:music?) > (let* ((res (map > (lambda (foo) (ly:pitch-semitones (ly:music-property > foo 'pitch))) > (ly:music-property some-music 'elements))) > (top (reverse (cdr (reverse res)))) > (bottom (cdr res)) > (ls (map > (lambda (h) (- (cadr h) (car h))) > (zip top bottom))) > (markups (map > (lambda (elt) (make-simple-markup (number->string elt))) > ls))) > (interpret-markup layout props #{ \markup \line #markups #}))) > > \markup \pitch-info #some-music
Okay, that’s basically what I was going to do "in the worst case situation". 1. I *was* hoping there was a "list->markup" macro/function somewhere… ;) 2. I have to admit that the final "build", i.e. > (markups (map > (lambda (elt) (make-simple-markup (number->string elt))) > ls))) > (interpret-markup layout props #{ \markup \line #markups #}))) is more compact than I had feared'; is usually true of the [good] Scheme code I come across. 3. I’m pretty sure I would have taken quite a while to find my way to "make-simple-markup" and "interpret-markup" — thanks for showing me that part of the fishing tackle box! > Hope this gets you started with whatever dodecaphonic plans you have... =) This dodecaphonic stuff is just an offshoot of one of my Salzburg sessions, which I’m using (because of its familiarity and proximity) as a way to jumpstart my Scheme learning process. Don’t worry: I’m not [currently] planning to rebuild Abjad in Scheme. ;) Thanks! Kieren. ________________________________ Kieren MacMillan, composer (he/him/his) ‣ website: www.kierenmacmillan.info ‣ email: i...@kierenmacmillan.info