Hi Thomas,

Thank you the solution, and for explaining how. I learned a lot from this!

Kevin

On Sun, Mar 15, 2015 at 9:27 PM, Thomas Morley <thomasmorle...@gmail.com>
wrote:

>
>
> 2015-03-15 22:07 GMT+01:00 Thomas Morley <thomasmorle...@gmail.com>:
>
>>
>>
>> 2015-03-15 21:48 GMT+01:00 Kevin Barry <barr...@gmail.com>:
>>
>>> Hi LilyPond experts,
>>>
>>> I'm trying to make a function that will draw a curved line given only a
>>> destination point (with some math I'll add later), but I've hit an early
>>> stumbling block: I can't seem to substitute variables for values in the
>>> path/curveto command list. The following code produces a
>>> `wrong-argument-type' error, but it points to scm/stencil.scm which isn't
>>> very helpful for figuring out what's wrong. Help appreciated!
>>>
>>> \version "2.18.2"
>>>
>>> #(define-markup-command (draw-curved-line layout props points)
>>>    (number-pair?)
>>>    (let ((xpt (car points))
>>>          (ypt (cdr points)))
>>>      (interpret-markup layout props
>>>        (markup #:path 1 '((curveto 0 ypt 0 ypt xpt ypt))))))
>>>
>>> \relative {
>>>   b_\markup { \draw-curved-line #'(5 . 5) }
>>> }
>>>
>>>
>> Hi Kevin,
>>
>> in cases where i have no clue what's wrong and don't understand the
>> error-message, I boil down the code and display all kind of data, values,
>> ets
>>
>> In your case I'd do:
>>
>> #(define-markup-command (draw-curved-line layout props points)
>>    (number-pair?)
>>    (let ((xpt (car points))
>>          (ypt (cdr points)))
>>
>>  (display '((curveto 0 ypt 0 ypt xpt ypt)))
>>  (newline)
>>  (display (caddar '((curveto 0 ypt 0 ypt xpt ypt))))
>>  (newline)
>>  (display (symbol? (caddar '((curveto 0 ypt 0 ypt xpt ypt)))))
>>
>>
>>      (interpret-markup layout props
>>        (markup
>>          ;#:path 1 '((curveto 0 ypt 0 ypt xpt ypt))
>>          "xy"
>>        ))
>>        ))
>>
>>
>>
>> The problem should be clear now: the variables in '((curveto 0 ypt 0 ypt
>> xpt ypt)) are not evaluated but taken as symbols.
>> You wrote a quoted list, but need some elements of the list be unquoted.
>> Shortest: use a combi of ` and ,
>>
>>
>> #(define-markup-command (draw-curved-line layout props points)
>>    (number-pair?)
>>    (let ((xpt (car points))
>>          (ypt (cdr points)))
>>      (interpret-markup layout props
>>        (markup
>>          #:path 1 `((curveto 0 ,ypt 0 ,ypt ,xpt ,ypt))
>>
>
> other syntax-possibilities:
> (list (list 'curveto 0 ypt 0 ypt xpt ypt))
> or most verbose:
> (quasiquote
>   ((curveto 0 (unquote ypt) 0 (unquote ypt) (unquote xpt) (unquote ypt))))
>
> Look up 'quote', 'unquote', 'quasiquote' etc in the guile manual
>
>        ))))
>>
>>
>>
>> HTH,
>>  Harm
>>
>>
>
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to