Por mucho que odie responder de esta manera, creo que su pregunta se basa en algunas suposiciones bastante problemáticas.
Para empezar, Python definitivamente no es un lenguaje de programación funcional. Python tiene una separación de sintaxis de expresión y expresión, lo que hace que sea muy difícil escribir código funcional sin estado de mutación. Lambda en Python es extremadamente limitado permitiendo solo una expresión. El alcance en Python no es compatible con el alcance anidado, ya que permite y dificulta las cosas cuando se anidan funciones que de otro modo harían referencia al alcance fuera de la función. Python no optimiza las llamadas de cola, lo que significa que Python es muy ineficiente para la recursión. El propio creador de Python se cita diciendo que Python no es un lenguaje funcional.
En segundo lugar, Ruby tampoco es una muy buena opción para aprender programación funcional. Tiene algún soporte opcional para las llamadas de cola, pero no es el predeterminado, así que ten cuidado. El alcance de Ruby también se limita al alcance de la función, lo que dificulta los bloques anidados. Además, Ruby y Python no tienen un tipo nativo decente que sea inmutable, por lo que probablemente tengas que crearlos todos tú mismo.
Ruby y Python realmente solo tienen algunas características de lenguaje token que se usan mucho en la programación de funciones como lambdas y funciones de filtro / mapa / plegado. Pero no son lenguajes de programación funcionales.
- ¿Hay una manera de aprender cómo adaptarse a los escenarios en los que no podrá percibir y no podrá confiar en la prueba y el error?
- ¿Qué tecnologías debo aprender en los próximos 6 meses que me aseguren un trabajo de alta remuneración en INDIA?
- ¿Sería mejor aprender de las conversaciones con intelectuales que leer libros?
- ¿Qué lenguaje práctico es el más rápido para aprender independientemente del idioma materno?
- ¿Por qué no todos aprenden a tocar el tipo?
A continuación, la idea de que un lenguaje es interpretado o compilado es realmente una falsa dicotomía. Es bastante sin sentido. Entiendo que varios idiomas solo tienen intérpretes de uso común y algunos idiomas solo se compilan en el uso común. Y sí, coloquialmente estoy de acuerdo, eso los hace lenguajes “interpretados” o “compilados”. Pero ahí termina. No tiene nada que ver con la sintaxis o la semántica. Por lo tanto, no hay propiedades de idioma que se garantice que existan o que no se basen en la interpretación o compilación. De hecho, podría tomar su lenguaje interpretado y escribir un compilador para él. ¿Ahora que? Nada sobre el lenguaje ha cambiado. Así que asegúrese de saber que esta es una falsa dicotomía al leer sobre las diferencias o al elegir qué idioma usar. También entiendo que la única implementación de Clojure que conozco compila el código de byte. El código de bytes es interpretado por la máquina virtual. Entonces, ¿se compila o interpreta Clojure? La respuesta es la misma que la respuesta para Java.
Dicho esto, recomendaría Clojure a lo grande. Es mucho más moderno, tiene una implementación mucho más rápida, tiene acceso a todas las bibliotecas de JVM, no rompieron el alcance como Ruby o Python, en realidad es un lenguaje funcional que no solo es un gran positivo sino que es lo que usted es específicamente buscando aprender También tiene la sintaxis Lisp que le da un sistema macro increíblemente poderoso.