The tune get's reversed on every time invocation. There could be a problem with the performance (which results in pause between repeats) so I would like to reverse the tune once, assign it to a variable and use that variable every time I need to play the reversed tune:
I don't understand why you think you need metaprogramming to solve this problem. I get that you do if you store the melodies as lambdas, but the simple thing everyone else does is to store them as lists of notes,
(LIST (DO) (MI) (SOL))
and then transformations are just list processing. When you're done with transformations, then you turn the list into a sound.
Every time I get stuck with the implementation I ask my self the same ... But I believe notes as blocks/tunes as scripts are more aestetic, intuitive and easier to play with than notes as lists/tunes as lists of lists.
vs
I imagine learning music more like grab the instrument, hit the key/, then hit another key rather than this is how C quater looks like on the notebook, this is how it sounds .... For introduction I find this approach better.
Wait, there's no reason the list has to have CEG instead of DoMiSol!
Also, you're mixing up input and output notations. The user would still enter a script made of DO etc blocks, but the resulting song would look like a table-format list.