Aceasta este o întrebare foarte bună.
Cred că este nuanțată, dar cu siguranță responsabilă:
Macrorele nu sunt blocate în s-expresii. Vedeți macrocomanda LOOP pentru o limbă foarte complexă scrisă folosind cuvinte cheie (simboluri). Deci, în timp ce puteți începe și încheia bucla cu paranteze, în interiorul ei are sintaxa proprie.
Exemplu:
(loop for x from 0 below 100
when (even x)
collect x)
Acestea fiind spuse, cele mai multe macro-uri simple folosesc doar s-expresii. Și tu ai fi "blocat" folosind-le.
Dar s-expresii, așa cum a răspuns Sergio, încep să se simtă bine. Sintaxa iese din cale și începeți codarea în arborele de sintaxă.
În ceea ce privește macrocomenzile pentru cititori, da, ați putea scrie ceva de genul:
#R{
ruby.code.goes.here
}
Dar ar trebui să scrieți propriul parser de sintaxă Ruby.
De asemenea, puteți mima câteva constructe Ruby, cum ar fi blocuri, cu macrocomenzi care se compilesc la construcțiile Lisp existente.
#B(some lisp (code goes here))
s-ar traduce la
(lambda() (some lisp (code goes here)))
Consultați această pagină pentru a afla cum să faceți acest lucru.