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?

¿Fue útil?

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í.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top