Haskell y Scheme son bastante diferentes, pero ambos tienen algunas cosas importantes en común. Yo diría que el lenguaje de programación más cercano a Haskell que es al menos tan razonablemente popular es ML (OCaml o SML). ML fue una gran influencia en Haskell. En cuanto a Scheme, diría que Python es uno de los lenguajes más similares que existen. Puedes decir Clojure o Common Lisp y eso también está bien.
Similitudes
Ambos idiomas pertenecen al conjunto de lenguajes funcionales. Los lenguajes funcionales, aunque no son exactamente un término riguroso, admiten un estilo de programación de cálculos basados en expresiones que utilizan funciones como mecanismo de abstracción primario.
- ¿Los programadores todavía usan AJAX?
- ¿Qué debo estudiar: informática o ingeniería química?
- Dado un lenguaje con una función de pliegue (ala Haskell) garantizada para terminar, ¿cuán necesario sería la integridad de Turing para que el resto de este lenguaje sea útil?
- ¿Cuáles son las ventajas de las redes informáticas?
- ¿Cuál es una explicación de los problemas P versus NP y otros términos relacionados en términos simples?
Deben admitir la optimización de llamadas de cola para permitir que este estilo admita bucles eficientes mediante recursividad. También deben admitir funciones de orden superior y funciones anónimas para permitir que se creen y usen abstracciones expresivas. También deben proporcionar tipos de datos convenientes y persistentes como listas, mapas y árboles que se puedan construir y separar de manera eficiente al compartir datos pero sin mutarlos.
Todas estas cosas, tanto Haskell como Scheme lo hacen. Ambos son ejemplos bastante fuertes de lo que la mayoría de las personas consideraría lenguajes funcionales. Ambos tienen un núcleo común del cálculo Lambda debajo del capó.
Las diferencias
Sin embargo, algunos aspectos de Scheme y Haskell son muy diferentes.
- Evaluación perezosa versus estricta: el esquema es un lenguaje estricto. Evalúa los argumentos de una función completamente antes de llamar a la función. Haskell, todo lo contrario. Llamará a la función y solo evaluará el argumento si es necesario.
- Haskell está estáticamente escrito. El esquema se escribe dinámicamente. Esta es una diferencia * enorme * y probablemente la mayor cosa que notará al programar en el lenguaje.
- Scheme tiene una sintaxis basada en la expresión S que permite macros potentes. Haskell no lo hace. Por lo general, las pequeñas diferencias sintácticas no aparecerían en mi lista porque las encuentro superficiales, pero en el caso de los lenguajes tipo Lisp, esta es una diferencia muy significativa.