[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Clef change after end-repeat before break -- how?
From: |
Jean Abou Samra |
Subject: |
Re: Clef change after end-repeat before break -- how? |
Date: |
Sat, 28 Jan 2023 18:00:13 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.0 |
On 28/01/2023 16:51, David Kastrup wrote:
> Jean Abou Samra <jean@abou-samra.fr> writes:
>
>>> Le 28 janv. 2023 à 08:01, Darren Ng <un1gfn@gmail.com> a écrit :
>>>
>>> [subject] How to define a macro that expands to a percussion "pitch"?
>>
>>
>> It may be worth noting that LilyPond does not have macros, only
>> variables and regular functions. Call me pedantic, but I think it is
>> helpful not to conflate the two.
>
> It's a hybrid, actually. In Lispy terms, the difference between a
> function and a macro is that a function evaluates its arguments while a
> macro evaluates the result of executing the macro body on the
> unevaluated arguments.
>
> LilyPond evaluates a music/event/scheme/void function's body after
> reading its arguments but the reading/interpretation of the arguments is
> directed by the predicates.
>
> So a music/event/scheme/void function does evaluate some of its parts
> (the predicates) in order to direct the syntactic interpretation of its
> arguments.
OK, I grant you that. Still very different from the concepts of
"macros" found in Scheme, Lisp, C, TeX or Rust, though.
>> There is no way in LilyPond to make a variable "just be replaced by
>> this code". Sometimes users get confused by this (I remember a
>> question about defining a chord modifier, which was similar to this
>> one). Instead, there are functions, as well as some other mechanisms
>> like drumPitchNames.
>
> In general, things are not purely functional but the categories and
> interpretation change around more by ad-hoc conditions than a cohesive
> macro mechanism.
Yup.
OpenPGP_signature
Description: OpenPGP digital signature