Me encontré con Rebol y me preguntaba sobre eso.
Me encontré con el siguiente script desde aquí :
use [feed questions answers][
feed: load-xml/dom http://stackoverflow.com/feeds/tag/rebol
questions: map-each entry feed/get-by-tag <entry> [
find/match entry/get <id> "http://stackoverflow.com/q/"
]
answers: make block! length? questions
foreach question questions [
question: load-xml/dom join http://stackoverflow.com/feeds/question/ question
foreach entry next question/get-by-tag <entry> [append answers entry/tree]
]
insert clear feed/find-element <entry> answers
feed/flatten
]
Todas las operaciones de manipulación de colecciones como map-each
recordarme JavaScript y C # tienen capacidades funcionales.
¿Es Rebol un lenguaje funcional? ¿Es compatible con la programación funcional? ¿Clasificaría como un lenguaje funcional puro (PFL)?
functional-programming
rebol
Benjamin Gruenbaum
fuente
fuente
Respuestas:
La " programación funcional pura " en su definición formal trata sobre la idea de diseñar máquinas computacionales cuya salida es puramente "una función de la entrada a la máquina" . Si introduce la misma entrada en la máquina, producirá la misma salida. Cada entrada se nombra explícitamente para que sepa con precisión cuáles son las dependencias. Un lenguaje de programación funcional puro lo aplica rigurosamente.
Sin embargo ... en la línea base "Rebol" puedes escribir cosas como:
Aquí vemos una función que devuelve su entrada entera todos los días, pero hoy, donde obtiene el valor más uno. Incluye una dependencia invisible en la fecha que no se especifica formalmente como argumento de la función. Es el tipo de cosa que hace que la gente de Haskell y los formalistas de software como yo griten un asesinato sangriento.
Por lo tanto, Rebol no es puramente funcional de fábrica. (... pero sigue leyendo ...)
La definición menos estricta de la programación funcional es cuando las funciones pueden actuar como valores en el lenguaje. Por lo tanto, puede asignar una función a una variable y usarla más tarde. En ese sentido, puede leer los gustos de javascript, un lenguaje funcional y ver que la definición incierta llevaría a algunas personas a decir que Javascript es un lenguaje funcional. Si va a ser tan suelto con la definición, esto sería "funcional":
(Nota: DOES es una conveniencia para definir una función sin argumentos, que solo tiene un cuerpo).
No sé si consideraría que (o JavaScript) se ajustan a lo que las personas con las que hablo llamarían programación funcional. YMMV.
Si pasa algún tiempo en ciencias de la computación, aprenderá sobre cosas como las Tarpits de Turing y la computabilidad y este tipo de principios de equivalencias donde "si puede conectar X con Y, entonces Z será verdadero". Y así como puede escribir una implementación de Haskell en C, y luego limitarse a usar solo llamadas C asignadas a la biblioteca de Haskell, puede afirmar que está haciendo "programación funcional" y ser técnicamente correcto.
Entonces, si quisieras decir que Rebol puede inclinarse por los estilos de programación funcionales, podrías ser pesimista y decir "bueno, no es mejor que pretender que estás haciendo C cuando estás usando un subconjunto tan limitado del lenguaje que" re usando Haskell por proxy " . El truco bajo la manga de Rebol es la facilidad con que te deslizas de un paradigma de "dialecto" a otro. Escribir un poco de lenguaje específico de dominio que resulta ser funcional es tan fácil y natural que no se siente como si estuvieras torciendo tu lenguaje para hacerlo. La capacidad de crear lenguajes específicos de dominio que tengan un carácter funcional conduce al etiquetado de Rebol como "paradigma neutral" .
Muchas personas mezclan Rebol con su dialecto más común (el dialecto DO) y piensan "eso es Rebol". Pero la "esencia" de Rebol se parece más a XML, es un formato de intercambio de datos que por coincidencia (está bien, no por casualidad) tiene un código hiperoptimizado que se enfoca en procesarlo de manera segura. Para una buena lectura de antecedentes sobre cómo supera a XML, vea ¿Fue XML defectuoso desde el principio por Carl Sassenrath de AmigaOS (y ahora Rebol) fama.
fuente