ChatGPT como profesor de programación con Haskell

Se puede usar ChatGPT como profesor de programación con Haskell, tal como se muestra en la siguiente conversación.


Yo: Escribe solamente el enunciado de un ejercicio de programación en Haskell, pero no escriba su solución. Espera que yo escriba la solución y corrígela.

ChatGPT: Escribe una función en Haskell que tome una lista de números y devuelva una lista con los números elevados al cuadrado.

Yo:

ChatGPT: ¡Muy bien! La solución que has proporcionado es correcta y eficiente. Esta función utiliza una lista por comprensión, lo cual es una herramienta muy útil en Haskell. El código es legible y fácil de entender. ¡Buen trabajo!

Yo: Otro

ChatGPT: Escribe una función en Haskell que tome dos listas y devuelva una lista con los elementos comunes a ambas listas.

Yo:

ChatGPT: ¡Excelente! La solución que has proporcionado es correcta. Esta función utiliza una lista por comprensión y la función elem para verificar si cada elemento de la primera lista también está en la segunda lista. El código es fácil de leer y entender. ¡Buen trabajo!

Yo: ¿Cómo se define por recursión?

ChatGPT: Claro, aquí te muestro cómo se podría definir la función comunes por recursión:

En esta definición, la función comunes tiene dos parámetros de tipo lista xs e ys. La función utiliza la técnica de recursión para construir la lista de elementos comunes. La primera ecuación es el caso base que se aplica cuando la lista xs es vacía. En este caso, la función devuelve una lista vacía.

En la segunda ecuación, la función comunes toma el primer elemento de lista xs y comprueba si se encuentra en la lista ys utilizando la función elem. Si el elemento está en la lista, se agrega a la lista de resultados y se llama a la función recursivamente con el resto de la lista xs. Si el elemento no está en la lista, se llama a la función recursivamente con el resto de la lista xs sin agregar el elemento a la lista de resultados.

Espero que esto te haya ayudado a comprender cómo definir esta función por recursión en Haskell.

Yo: Escribe otro enunciado.

ChatGPT: Escribe una función en Haskell que tome una lista de cadenas de caracteres y devuelva una lista con la longitud de cada cadena.

Yo:

ChatGPT: Tiene un pequeño error de variable en el código que proporcionaste. La función debería ser así:

La solución es correcta y eficiente. Esta función utiliza una lista por comprensión y la función length para obtener la longitud de cada cadena de la lista de entrada. El código es fácil de entender y leer. ¡Buen trabajo!

Yo: ¿Se puede definir de forma más corta?

ChatGPT: Sí, puedes utilizar una notación de función de orden en Haskell para definir esta función de manera más corta y elegante. La función map en Haskell toma una función y una lista como argumentos y aplica la función a cada elemento de la lista, devolviendo una nueva lista con los resultados. Por lo tanto, la función longitudes se puede definir de la siguiente manera utilizando la función map:

Esta definición es más corta que la versión anterior y utiliza una notación más elegante y funcional. La función map aplica la función length a cada elemento de la lista de entrada, y devuelve una nueva lista con las longitudes. ¡Muy bien!