[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Scheme coding] turning a list into a markup/string
From: |
David Nalesnik |
Subject: |
Re: [Scheme coding] turning a list into a markup/string |
Date: |
Tue, 21 Jan 2020 14:32:10 -0600 |
Hi Kieren!
On Tue, Jan 21, 2020 at 1:52 PM Kieren MacMillan
<address@hidden> wrote:
>
> Hi all,
>
> Here’s a perfect example of why I keep stumbling (and stopping) when trying
> to learn Scheme+Lilypond… =\
>
> With Mike S’s help — read: he did it all, actually! (though I fully
> understand every part of the code) — I have the following:
>
> %%% SNIPPET BEGINS
> \version "2.19.83"
>
> some-music = { a'4 bes' b' aes' g' cis' d' ees' fis' f' e' c' }
>
> #(define (zip . xss) (apply map list xss))
>
> #(display
> (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)))
> (map (lambda (h) (- (cadr h) (car h))) (zip top bottom)))
> )
> %%% SNIPPET ENDS
>
> Works great. Just what I want at this stage in the (multi-stage) procedure
> I’m trying to code.
>
> As the next step, I want to turn this into a function and display the result
> in a markup. Result: I spend several hours searching documentation, trying
> different functions, and getting one (or more!) errors per attempt, but no
> success. I literally cannot figure out how to turn this into a string, save
> hand-coding a recursion/map that takes each element of the list and appends
> it onto a string… and if that’s actually the "correct"/"best" way to do it,
> then I deeply question my desire to code in Scheme+Lilypond at all. ;)
>
> So someone please tell me what simple thing I’m missing here. In the worst
> case scenario, you just give me a fish and I can eat for a little while
> longer (read: not give up); best case senario, you teach me (and anyone else
> reading this list, now or in the future in the future) how to fish.
>
> Thanks,
> Kieren.
Try this:
%% SNIPPET BEGINS
\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
%%% SNIPPET ENDS
Hope this gets you started with whatever dodecaphonic plans you have...
David
- [Scheme coding] turning a list into a markup/string, Kieren MacMillan, 2020/01/21
- Re: [Scheme coding] turning a list into a markup/string,
David Nalesnik <=
- Re: [Scheme coding] turning a list into a markup/string, David Kastrup, 2020/01/21
- Re: [Scheme coding] turning a list into a markup/string, Kieren MacMillan, 2020/01/21
- Re: [Scheme coding] turning a list into a markup/string, David Kastrup, 2020/01/21
- Re: [Scheme coding] turning a list into a markup/string, Thomas Morley, 2020/01/21
- Re: [Scheme coding] turning a list into a markup/string, David Kastrup, 2020/01/21
- Re: [Scheme coding] turning a list into a markup/string, Thomas Morley, 2020/01/21
- Re: [Scheme coding] turning a list into a markup/string, David Kastrup, 2020/01/21