Am 4. September 2016 19:30:02 MESZ, schrieb "Оксана Крымина"
<ocrim...@gmail.com>:
>Great! It works! It works!
>Thank You!
>
The first thing is you had to use define-music-function because that returns
*music*.
Then you can return a *list* of music expressions with something like
@(map
(lambda (len)
#{ \repeat unfold #len ... #})
llen)
(completely untested, on the phone)
This iterates over your input list and produces the music using regular syntax.
HTH
Urs
>2016-09-04 20:15 GMT+03:00, Simon Albrecht <simon.albre...@mail.de>:
>> Hi Oxana,
>>
>> I _guess_ the reason it doesn’t work is because the parser doesn’t
>> accept a Scheme expression instead of the number after \repeat
>unfold.
>> The solution is creating music via Scheme. As a first step, you can
>> always use something like
>>
>> %%%%%%%
>> \version "2.19.47"
>> \displayMusic { \repeat unfold 2 { c'1 } }
>> %%%%%%%
>>
>> to see what the music looks like on the Scheme level:
>>
>> ;;;;;;;;;;;;;;;;;;;;;
>> (make-music
>> 'SequentialMusic
>> 'elements
>> (list (make-music
>> 'UnfoldedRepeatedMusic
>> 'elements
>> '()
>> 'repeat-count
>> 2
>> 'element
>> (make-music
>> 'SequentialMusic
>> 'elements
>> (list (make-music
>> 'NoteEvent
>> 'duration
>> (ly:make-duration 0)
>> 'pitch
>> (ly:make-pitch 0 0)))))))
>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>
>> Now I built a music function using that information:
>>
>> %%%%%%%%%%%%%%%
>> \version "2.18.2"
>>
>> createRepeats =
>> #(define-music-function (parser location nums mus end) (list?
>ly:music?
>> ly:music?)
>> (let ((repeater (lambda (n) (make-music
>> 'SequentialMusic
>> 'elements
>> (list (make-music
>> 'UnfoldedRepeatedMusic
>> 'elements
>> '()
>> 'repeat-count
>> n
>> 'element
>> mus)
>> end)))))
>> (make-sequential-music (map repeater nums))))
>> \createRepeats #'(2 3 7) { c'1 } { \bar "||" }
>> %%%%%%%%%%%%%%%%
>>
>> If you have further questions, feel free to ask back.
>>
>> Best, Simon
>>
>> PS. In recent development versions, one may use nicer syntax:
>>
>> %%%%%%%%%%%%%%%%
>> \version "2.19.47"
>>
>> createRepeats =
>> #(define-music-function (nums mus end) (list? ly:music? ly:music?)
>> (let ((repeater (lambda (n) (make-music
>> 'SequentialMusic
>> 'elements
>> (list (make-music
>> 'UnfoldedRepeatedMusic
>> 'elements
>> '()
>> 'repeat-count
>> n
>> 'element
>> mus)
>> end)))))
>> (make-sequential-music (map repeater nums))))
>> \createRepeats 2,3,7 { c'1 } { \bar "||" }
>> %%%%%%%%%%%%%%%%
>>
>> On 04.09.2016 18:52, Оксана Крымина wrote:
>>> hello all!
>>>
>>> please, help me to write a function to convert several numbers like
>(5
>>> 7 10 8) to musical string like
>>> \repeat unfold 5 {c2} \bar ""
>>> \repeat unfold 7 {c2} \bar ""
>>> \repeat unfold 10 {c2} \bar ""
>>> \repeat unfold 8 {c2} \bar ""
>>>
>>> my code produces errors only:
>>> \version "2.18.2"
>>> musSpisok = #(define-scheme-function (parser location llen)(list?)
>>> (if (not (null? llen))
>>> #{
>>> \repeat unfold $(car llen) {c2} \bar "" (
>>> \musSpisok #'(cdr llen)) )
>>> #})
>>>
>>> thanx,
>>> Oxana
>>>
>>> _______________________________________________
>>> lilypond-user mailing list
>>> lilypond-user@gnu.org
>>> https://lists.gnu.org/mailman/listinfo/lilypond-user
>>
>>
>
>_______________________________________________
>lilypond-user mailing list
>lilypond-user@gnu.org
>https://lists.gnu.org/mailman/listinfo/lilypond-user
--
Diese Nachricht wurde von meinem Android-Mobiltelefon mit K-9 Mail gesendet.
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user