Investigacion Haskell
Investigacion Haskell
Investigacion Haskell
Podemos separar el cuerpo que define el comportamiento de una función en varias partes, de forma
que el código quede mucho más elegante, limpio y fácil de leer. Podemos usar el ajuste de patrones
con cualquier tipo de dato: números, caracteres, listas, tuplas, etc. Vamos a crear una función muy
trivial que compruebe si el número que le pasamos es un siete o no.
Cuando llamamos a lucky, los patrones son verificados de arriba a abajo y cuando un patrón concuerda
con el valor asociado, se utiliza el cuerpo de la función asociado. En este caso, la única forma de que
un número concuerde con el primer patrón es que dicho número sea 7. Si no lo es, se evaluara el
siguiente patrón, el cual coincide con cualquier valor y lo liga a x. También se podría haber
implementado utilizando una sentencia if. Pero, ¿qué pasaría si quisiéramos una función que nombrara
los número del 1 al 5, o "No entre uno 1 y 5" para cualquier otro número? Si no tuviéramos el ajuste
de patrones deberíamos crear un enrevesado árbol if then else. Sin embargo con él:
Ten en cuenta que si movemos el último patrón (el más general) al inicio, siempre obtendríamos "No
entre uno 1 y 5" como respuesta, ya que el primer patrón encajaría con cualquier número y no habría
posibilidad de que se comprobaran los demás patrones.
Haskell utiliza evaluación perezosa o mediante paso de parámetros por nombre usando punteros
para compartir valores de expresiones.
𝑐𝑢𝑎𝑑𝑟𝑎𝑑𝑜 𝑥 = 𝑥 ∗ 𝑥
𝑢𝑛𝑜𝑠 = 1: 𝑢𝑛𝑜𝑠
Funciones y operadores:
(&&) ∶ : 𝐵𝑜𝑜𝑙 −> 𝐵𝑜𝑜𝑙 −> 𝐵𝑜𝑜𝑙
(||) ∶ : 𝐵𝑜𝑜𝑙 −> 𝐵𝑜𝑜𝑙 −> 𝐵𝑜𝑜𝑙
𝑛𝑜𝑡 ∶ : 𝐵𝑜𝑜𝑙 −> 𝐵𝑜𝑜𝑙
𝑜𝑡ℎ𝑒𝑟𝑤𝑖𝑠𝑒 ∶ : 𝐵𝑜𝑜𝑙
El tipo int
El tipo float
El tipo char
Declaración de tipos
3
Investigación Haskell
Se puede definir un nuevo nombre para un tipo existente mediante una declaración de tipo.
_ El nombre del tipo tiene que empezar por mayúscula.
𝑡𝑦𝑝𝑒 𝑆𝑡𝑟𝑖𝑛𝑔 = [𝐶ℎ𝑎𝑟]
_ Las declaraciones de tipo pueden tener parámetros.
𝑡𝑦𝑝𝑒 𝑃𝑎𝑟 𝑎 = (𝑎, 𝑎)
_ Las declaraciones de tipo no pueden ser recursivas.
Definiciones de tipos
Técnica de Backtracking (Prolog): si una alternativa “falla”, el flujo retorna hasta la última decisión e
intenta otra.
Técnicas de aprendizaje reforzado (A-LISP): recordar decisiones exitosas y aumentar su prioridad, así
como considerar las ediciones en el contexto del estado mutable.
4
Investigación Haskell
Búsqueda no determinista
Pueden simularse utilizando la lista de éxitos como, por ejemplo: Soluciones x = x, x candidatos,
validos.
Datos no deterministas
Requiere tipos de datos diferentes como sonDatalista m a = nil (cons (m a) (m (list a))