2008-10-15 7 views
6

REBOL no tiene una forma integrada de realizar listas de comprensión. Sin embargo, REBOL tiene una poderosa funció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 pasa a una función que, por falta de un término mejor, he llamado comprehend.¿Qué debería llamar una función REBOL que enumera las comprensiones?

Ejemplo:

comprehend [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])] 

Por alguna razón, comprehend no suena bien para mí, pero algo así como eval es demasiado general.

No he encontrado ningún otro idioma que requiera una palabra clave o una función para la lista de comprensiones. Son azúcar sintáctico puro donde sea 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 para eso?

+1

Aquí está el código fuente de la lista por comprensión: http://blog.revolucent.net/2009/04/dirt-simple-dsl-in-rebol.html –

Respuesta

4

¿Qué tal select?

select [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]

+2

Rebol ya tiene un 'select' función, y es importante. No este nombre – BrianH

2

Como las listas de comprensión se pueden considerar análogas al mapa, puede pensar en llamarlo algo así como "listmap". Alternativamente, debido a que las listas de comprensión se basan en la notación del conjunto de compilaciones, puede llamarlo algo como "compilar" o "compilar".

(Negación: Sé muy poco sobre REBOL, así que perdónenme si ya se toman estos nombres)

1

do podrían ser adecuadas, como las listas por comprensión son sólo una instancia de Monad comprensiones y do es la palabra clave utilizada para los cálculos en Haskell Monádicos azucaradas pero sospecho que es demasiado vaga para una biblioteca de usuario. Llamé a mi lista de funciones de comprensión comp, pero eso es solo una abreviación de lo que ya tienes. Tal vez yielding? P.ej. yielding [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]. Simplemente bizquea y finge que [] no están allí.

+0

Desafortunadamente DO ya es una palabra REBOLDE. –

Cuestiones relacionadas