Herramientas de usuario

Herramientas del sitio


introalg:taller09_3

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
introalg:taller09_3 [2009/04/14 12:39] lauraintroalg:taller09_3 [2018/08/10 03:03] (actual) – editor externo 127.0.0.1
Línea 173: Línea 173:
 Haskell es un lenguaje tipado, es decir, todo dato pertenece a una clase o tipo de datos. En general, la definición de una función va precedida de su //signatura de tipos//, donde declaramos los tipos que están involucrados en la función: Haskell es un lenguaje tipado, es decir, todo dato pertenece a una clase o tipo de datos. En general, la definición de una función va precedida de su //signatura de tipos//, donde declaramos los tipos que están involucrados en la función:
 <code> <code>
-  sgn :: Int -> Int     -- esta línea es la signatura de tipos de la función sgn +sgn :: Int -> Int     -- esta línea es la signatura de tipos de la función sgn 
-  sgn x   | 0<  = 1 +sgn x   | 0<  = 1 
-          | x<  = -1 +        | x<  = -1 
-          | x==0  = 0+        | x==0  = 0
 </code> </code>
  
 La signatura de tipos está formada por el nombre de la función y el tipo de sus parámetros y resultado. El nombre va seguido de ''::'' y los parámetros y el resultado van separados por ''->''. Por ejemplo: La signatura de tipos está formada por el nombre de la función y el tipo de sus parámetros y resultado. El nombre va seguido de ''::'' y los parámetros y el resultado van separados por ''->''. Por ejemplo:
 <code> <code>
-  sgn :: Int -> Int +sgn :: Int -> Int 
-  reverse :: [a] -> [a] +reverse :: [a] -> [a] 
-  map :: (a -> b) -> [a] -> [b]+map :: (a -> b) -> [a] -> [b]
 </code> </code>
 Pequeño ejercicio sobre la aridad((Recuerden que la aridad es el número de argumentos de la función: unaria si tiene un argumento, binaria si tiene dos, etc.)) de las funciones: cuál de estas tres funciones es unaria, cuál binaria, cuál ternaria?  Pequeño ejercicio sobre la aridad((Recuerden que la aridad es el número de argumentos de la función: unaria si tiene un argumento, binaria si tiene dos, etc.)) de las funciones: cuál de estas tres funciones es unaria, cuál binaria, cuál ternaria? 
Línea 238: Línea 238:
 Veamos algunos ejemplos: Veamos algunos ejemplos:
 <code> <code>
-  suma3upla :: (Int,Int,Int) -> Int +suma3upla :: (Int,Int,Int) -> Int 
-  suma3upla (x,y,z) = x+y+z +suma3upla (x,y,z) = x+y+z 
-   +</code> 
-  sumaYResta :: Int -> Int -> (Int,Int) +<code>   
-  sumaYResta x y = (x+y, x-y)+sumaYResta :: Int -> Int -> (Int,Int) 
 +sumaYResta x y = (x+y, x-y)
 </code> </code>
  
Línea 269: Línea 270:
 </code> </code>
  
-Pero no sólo podemos distinguir el primer elemento de una lista, podemos distinguir //cualquier fracción inicial//. No podemos distinguir fracciones finales de las listas porque la estructura de tuplas requiere que para distinguir el //n+1// elemento de una tupla hayamos distinguido el elemento //n//.+Pero no sólo podemos distinguir el primer elemento de una lista, podemos distinguir //cualquier fracción inicial//. Cuando decimos que podemos distinguir cualquier fracción inicial de una lista, lo que queremos decir es que nos podemos referir al n-ésimo elemento de una lista, eso sí, para hacerlo tenemos que hacerlo con un patrón en el que se representen todos los elementos desde el primero hasta el n-1. Por ejemplo, si queremos referirnos al tercer elemento de una lista, tendremos que referirnos también al primero y al segundo, aunque sea mediante un patrón irrefutable, por ejemplo, de esta forma: 
 +<code> 
 +tercero [a] -> a 
 +tercero [_:_:x:_] = x 
 +</code> 
 + 
 +Sin embargo, podemos dejar el resto de la lista sin detallar cuántos elementos hay. No podemos distinguir fracciones finales de las listas porque la estructura de tuplas requiere que para distinguir el //n+1// elemento de una tupla hayamos distinguido el elemento //n//.
  
 Definimos un predicado que decide si //hay 2 o más elementos en una lista//: Definimos un predicado que decide si //hay 2 o más elementos en una lista//:
introalg/taller09_3.1239712782.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)