¿Qué debería llamar una función REBOL que enumera las comprensiones?
-
03-07-2019 - |
Pregunta
REBOL no tiene una forma integrada de realizar comprensiones de listas. Sin embargo, REBOL tiene una poderosa instalación (conocida como parse
) que se puede usar para crear lenguajes específicos de dominio (DSL). He usado parse
para crear un mini-DSL para la comprensión de listas. Para interpretar la expresión, el bloque que contiene la comprensión se pasa a una función, que a falta de un término mejor he llamado comprender
.
Ejemplo :
comprehend [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]
Por alguna razón, comprender
no me suena bien, pero algo como eval
es demasiado general.
No he encontrado ningún otro idioma que requiera una palabra clave o función para la comprensión de listas. Son azúcar sintáctica pura donde quiera que existan. Lamentablemente no tengo esa opción. Entonces, viendo que debo tener una función, ¿cuál es un nombre bueno, sucinto y lógico?
Solución
¿Qué tal select
?
seleccione [(a * b) para a en 1x100 para b en 4x10 donde (todos [¿impar? a impar? b])]
Otros consejos
Debido a que las comprensiones de listas pueden considerarse análogas al mapa, puede pensar en llamarlo algo así como "mapa de lista". Alternativamente, debido a que las comprensiones de listas se basan en la notación de generador de conjuntos, podría llamarlo algo así como "construir". o " lista de compilación " ;.
(Descargo de responsabilidad: sé muy poco acerca de REBOL, así que perdóname si estos nombres ya están en uso)
transfigurar
do
podría ser apropiado, ya que las comprensiones de listas son solo una instancia de las comprensiones Monad, y do
es la palabra clave utilizada en Haskell para cálculos monádicos azucarados, pero sospecho que también lo es vago para una biblioteca de usuario. Llamé a mi función de comprensión de lista comp
, pero eso es solo una abreviatura de lo que ya tienes. ¿Quizás cediendo
? P.ej. rindiendo [(a * b) para a en 1x100 para b en 4x10 donde (todos [¿impar? a impar? b])]
. Simplemente entrecierra los ojos y finge que [] no está allí.