En TeX puede definir macros que tengan un "patrón de argumento" que básicamente significa que su protocolo de llamadas es gratuito. Para su ejemplo específico, podría usar
\def\getTopCustomers#1OfTheYear#2;{%
The #1 top customers of the year #2.
}
\getTopCustomers 50 OfTheYear 2010;
Tenga en cuenta que también es posible deshacerse de él ;
si acepta jugar con registros:
\newcount\customers
\newcount\year
\def\getTopCustomers#1OfTheYear{%
\customers#1\relax
\afterassignment\reallyGetTopCustomersOfTheYear
\year
}
\def\reallyGetTopCustomersOfTheYear{%
The {\the\customers} top customers of the year {\the\year}.
}
\getTopCustomers 50 OfTheYear 2010
TeX le permite reconfigurar su lexer, y gracias a la \afterassignment
macro que utilicé anteriormente, puede usar los procedimientos integrados para lex números. Es muy útil definir protocolos de llamadas muy concisos . Por ejemplo, es muy plausible escribir macros TeX que comprendan la notación Markdown para tablas.
Ahora pregunta "¿cómo accedo a mi base de datos donde los clientes están almacenados desde TeX?", Pero esta es otra pregunta. :)
En Common lisp, definitivamente es posible definir una query
macro que le permita escribir
(query getTopCustomers 50 OfTheYear 2010)
donde getCustomers y OfTheYear se interpretan como símbolos. Es entonces el trabajo de la macro darle sentido. El lisp común es excelente en el dominio de la legibilidad del código (¡sí, lo digo en serio!) Porque el sistema macro permite crear fácilmente pseudo-idiomas ajustados para su aplicación. (Creo que se llaman lenguajes de aplicación).
PD: Parece que nadie citó C ++. Lo más cercano que puede llegar (sin el preprocesador) es
query.getTopCustomers(50).OfTheYear(2010):
el truco es dejar que getTopCustomers
devuelva una referencia query
(o cualquier otra cosa) que también implemente OfTheYear
. Puede crear este ejemplo en un lenguaje de consulta pequeño, pero luego debe identificar las propiedades finales (devolver un valor) o agregar un finalise
método (realizar la búsqueda y devolver el valor). Si lo desea, también puede imitar los controladores de flujo de STL y escribir cosas como
query << getTopCustomers(50) << OfTheYear(2010) << flush;
pero esto nuevamente va en la dirección de los lenguajes de aplicación.
Editar: Pasé por alto las respuestas de @han, que también citan Common Lisp y C ++ (¡pero no TeX!).
'hello world' indexOf: $o startingAt: 6
oRectangle width: 100 height: 200
. Por cierto, ¿qué hay de malo en esta pregunta?returnValue = GetTop(50, CustomersOfTheYear(2010))
lo que me parece igualmente legible, y en realidad más flexible / ortogonal. ... y sí, es una sintaxis normal.