¿Qué tan similares son Haskell y Scheme?

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.

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.

  1. 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.
  2. 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.
  3. 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.

Esquema:
Recientemente, a menudo me pregunto por qué no hacen que los espacios en blanco sean significativos y eliminan muchos de los paréntesis, al menos opcionalmente. (Sé de un lenguaje de nicho que hace esto, pero no recuerdo su nombre, también es bastante lo que hace Python con llaves, ¿no?).

Haskell
Es cierto que las mónadas pueden ser un dolor y son enormes para los principiantes, pero la anotación ayuda un poco …
Lo que definitivamente le falta a Haskell es un tutorial / documentación para que no se exponga el cálculo Lambda, como era cuando comencé a aprenderlo.

More Interesting

Cómo agregar memoria a una computadora

¿Puede la polaridad de un imán ser una alternativa a algunos de los componentes de una computadora eléctrica moderna?

¿Cuál es mejor: ingeniería mecánica o informática?

¿Por qué elegir la estructura de datos incorrecta hace que un programa sea ineficiente?

¿Por qué la gente quiere construir una inteligencia general artificial?

¿Debo sumergirme en el aprendizaje automático y la inteligencia artificial o seguir creciendo en la empresa?

¿Cuál es la diferencia entre base de datos paralela y mapreduce?

¿Es posible detectar si un servidor está realmente inactivo, o si simplemente responde lentamente en un sistema distribuido?

¿Cómo es útil una computadora?

¿Cuál es su opinión sobre negarse a dejar que Yann LeCun dé una conferencia en Arabia Saudita en la Universidad de Ciencia y Tecnología King Abdullah debido a la religión?

¿Cuáles son algunas de las mejores prácticas para escribir paquetes de software específicamente para aplicaciones científicas y aprendizaje automático? ¿Serían relevantes las mismas prácticas utilizadas en el desarrollo de software ágil?

¿Qué tan importante es implementar sistemas de aprendizaje automático para las próximas startups?

¿Cuáles son algunos ejemplos de fallas bizantinas en sistemas distribuidos?

¿Alguien ha tratado de usar algoritmos de procesamiento de lenguaje natural en jerga legal que aproveche la estructura del documento?

¿Hay una plataforma para registrarse para obtener información sobre el aprendizaje automático, conferencias, talleres, trabajos y otras actividades?