Intro haskell

Download Intro haskell

Post on 03-Jul-2015

819 views

Category:

Education

1 download

Embed Size (px)

DESCRIPTION

una introduccion al lenguaje gaskell...

TRANSCRIPT

<ul><li> 1. Un lenguaje funcional avanzado:Haskell</li></ul> <p> 2. Objetivos </p> <ul><li>Introducir la sintaxis bsica deHaskell </li></ul> <ul><li>Aprender a utilizar el intrpreteHugspara ejecutar programas escritos en Haskell </li></ul> <p> 3. Desarrollo </p> <ul><li>Introduccin a Haskell </li></ul> <ul><li>Nivel lxico </li></ul> <ul><li>Expresiones </li></ul> <ul><li>Declaraciones </li></ul> <p> 4. Desarrollo </p> <ul><li>Introduccin a Haskell </li></ul> <ul><li>Nivel lxico </li></ul> <ul><li>Expresiones </li></ul> <ul><li>Declaraciones </li></ul> <p> 5. Caractersticas principales </p> <ul><li>Permite al usuario definir suspropiostipos y estructuras de datos </li></ul> <ul><li>Dispone de los tipos predefinidos usuales ( booleanos ,enteros ,caracteres ,cadenas , ) con las operaciones predefinidas habituales </li></ul> <ul><li>Soporta distintos niveles depolimorfismo : </li></ul> <ul><li><ul><li>Polimorfismo paramtrico </li></ul></li></ul> <ul><li><ul><li>Polimorfismo ad-hoc (sobrecarga) </li></ul></li></ul> <p>Introduccin a Haskell 6. Caractersticas principales </p> <ul><li>Un programa es un conjunto de definiciones de funcin realizadas medianteecuaciones condicionales </li></ul> <ul><li>Pueden emplearse expresionesletywhereas como las reglas de layout </li></ul> <ul><li>Funciones deorden superior </li></ul> <ul><li>La evaluacin de expresiones es perezosa (lazy) </li></ul> <p>Introduccin a Haskell 7. Caractersticas principales </p> <ul><li>Los programas pueden organizarse enmoduloso libreras </li></ul> <ul><li>Los programas Haskell suelen llevar la extensin hs . </li></ul> <ul><li>El mduloPrelude.hscontiene definiciones de tipos y funciones que pueden utilizarse de forma inmediata en cualquier programa </li></ul> <p>Introduccin a Haskell 8. Introduccin a Haskell Importacin/Exportacin de mdulos Definicin de tipos y estructuras de datos Definicin de funciones Module ProgHaskell 9. Introduccin a Haskell Definicin de tipos y estructuras de datos Definicin de funciones Prelude.hs 10. Desarrollo </p> <ul><li>Introduccin a Haskell </li></ul> <ul><li>Nivel lxico </li></ul> <ul><li>Expresiones </li></ul> <ul><li>Declaraciones </li></ul> <p> 11. </p> <ul><li>UnidentificadorHaskell consta de una letra seguida por cero o ms letras, dgitos, subrayados y comillas simples. </li></ul> <ul><li>Los identificadores soncase-sensitive(el uso de minsculas o maysculas importa) </li></ul> <p>Nivel lxico Identificadores 12. </p> <ul><li>Como en todos los lenguajes, hay palabras reservadas: </li></ul> <ul><li>case, data, deriving, do, else, if, import,let, module, of, then, type, where </li></ul> <ul><li>La letra inicial del identificador distingue familias de identificadores: empiezan por </li></ul> <ul><li><ul><li>Maysculalostiposyconstructoresde datos </li></ul></li></ul> <ul><li><ul><li>Minsculalos nombres defuncinyvariables </li></ul></li></ul> <p>Nivel lxico Identificadores 13. Nivel lxico </p> <ul><li>Ejemplo:Bool ,Int ,Char ,String (predef) </li></ul> <ul><li><ul><li><ul><li>data Color =Red|Green|Blue </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>data Laboral =Lu|Ma|Mi|Ju|Vi </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>data TreeInt =L Int |B TreeInt TreeInt </li></ul></li></ul></li></ul> <ul><li><ul><li><ul><li>data Tree t =L t|B( Tree t ) ( Tree t ) </li></ul></li></ul></li></ul> <p>Constructores de tipos Constructores de datos Variables de tipo Mayusc. Minusc. Identificadores 14. Nivel lxico Constructores de datos Nombres de funcin Mayusc. Minusc. </p> <ul><li>Ejemplo:</li></ul> <ul><li>fact n |n == 0=1 </li></ul> <ul><li>|n &gt; 0 =n * fact( n - 1 ) </li></ul> <ul><li>length [] =0 </li></ul> <ul><li>length ( x : xs )=1 + length xs </li></ul> <p>Variables 15. </p> <ul><li>Se pueden especificaroperadores : cadenas de smbolos escogidos entre</li></ul> <ul><li>!, #, $, %, &amp;, *, +, -, ., /, , ?, @, , :, </li></ul> <ul><li>Ejemplo: +!+, e <ul><li>Lasvariables x 1 , ..., x k son distintas entre s y las nicas que aparecen en la expresine </li></ul><p>Expresiones 33. Expresiones lambda </p><ul><li>Ejemplo </li></ul><ul><li> x y -&gt; x+y </li></ul><ul><li> x -&gt; 2*x </li></ul><ul><li> x -&gt; True </li></ul><ul><li> m n -&gt; B (L m) (L n) </li></ul><p>Expresiones 34. Desarrollo </p><ul><li>Introduccin a Haskell </li></ul><ul><li>Nivel lxico </li></ul><ul><li>Expresiones </li></ul><ul><li>Declaraciones </li></ul><p> 35. Tipos definidos por el usuario Declaraciones </p><ul><li>Los tipos de usuario se definen junto con losvaloresque stos contienen </li></ul><ul><li>Ejemplos: </li></ul><ul><li><ul><li><ul><li>data Color= Red | Green | Blue </li></ul></li></ul></li></ul><ul><li><ul><li><ul><li>data Laboral = Lu | Ma | Mi | Ju | Vi </li></ul></li></ul></li></ul><ul><li><ul><li><ul><li>data TreeInt = L Int | B TreeInt TreeInt </li></ul></li></ul></li></ul><ul><li><ul><li><ul><li>data Tree t= L t | B (Tree t) (Tree t) </li></ul></li></ul></li></ul><p> 36. </p><ul><li>Losvaloresse obtienen considerando la definicin de tipo como unagramtica : </li></ul><ul><li><ul><li>Los constructores de datos son smbolos terminales </li></ul></li></ul><ul><li><ul><li>Los constructores de tipo son smbolos no terminales </li></ul></li></ul><ul><li>Los valores del tipo son los trminos del lenguaje generado por la gramtica </li></ul><p>Tipos definidos por el usuario Declaraciones 37. </p><ul><li>Ejemplo: </li></ul><ul><li><ul><li>Int := 0 | 1 | 2 | 3 | | -1 | -2 | -3 | </li></ul></li></ul><ul><li><ul><li>TreeInt := L Int | B TreeInt TreeInt </li></ul></li></ul><ul><li><ul><li>Valores de este tipo son: </li></ul></li></ul><ul><li><ul><li>L 1,L -10,B (L 1) (L 10),B (B (L 1) (L1)) (L -1) </li></ul></li></ul><p>Tipos definidos por el usuario Declaraciones 38. 1 4 2 3 (B (L 1) (B (B (L 2) (L 3)) (L 4))) </p><ul><li>Ejemplo devalordel tipoTreeInt </li></ul><p>Tipos definidos por el usuario Declaraciones 39. </p><ul><li>Las siguientes expresiones: </li></ul><ul><li><ul><li>L (1+1)</li></ul></li></ul><ul><li><ul><li>B (B (L 1) (L (length ab))) (L (fact 2)) </li></ul></li></ul><ul><li>son del tipo TreeInt, peronoson valores (contienen smbolos no constructores) </li></ul><p>Tipos definidos por el usuario Declaraciones 40. Definicin de funciones </p><ul><li>En los lenguajes funcionales, lo normal es definir las funciones medianteecuacionesempleando (y combinando) distintas tcnicas: </li></ul><ul><li><ul><li>parmetros formales </li></ul></li></ul><ul><li><ul><li>guardas </li></ul></li></ul><ul><li><ul><li>ajuste de patrones </li></ul></li></ul><ul><li><ul><li>distincin de casos </li></ul></li></ul><ul><li><ul><li>clusulaswhere </li></ul></li></ul><p>Declaraciones 41. Parmetros formales Definicin de funciones </p><ul><li>Una funcinf se describe mediante ecuaciones de la forma: </li></ul><p>fx 1 x k= r </p><ul><li>Lasvariables x 1 , ..., x k son distintas entre s y las nicas que aparecen en la parte derechar </li></ul><p> 42. Definicin de funciones </p><ul><li>Ejemplos: </li></ul><p>doble x = x+x triple x = 3*x seisveces x= doble (triple x) fact n= if n==0 then 1 else n*fact (n-1) Parmetros formales 43. Definicin de funciones </p><ul><li>Ejemplos: </li></ul><p>doble x= x+x triple x= 3*x Funciones primitivas Parmetros formales 44. Definicin de funciones </p><ul><li>Ejemplos: </li></ul><p>doble x= x+x triple x= 3*x seisveces x = doble ( triple x) Otras funciones de usuario Parmetros formales 45. Definicin de funciones </p><ul><li>Ejemplos: </li></ul><p>doble x= x+x triple x= 3*x seisveces x = doble (triple x) fact n= if n==0 then 1 else n* fact (n-1) Recursividad Parmetros formales 46. Parmetros formales y guardas Definicin de funciones </p><ul><li>Una funcinf se describe mediante ecuaciones de la forma: </li></ul><p>fx 1 x k |c = r dondeces una expresin booleana 47. Parmetros formales y guardas Definicin de funciones </p><ul><li>Ejemplos: </li></ul><p>fact n |n==0 = 1 |n&gt;0= n*fact (n-1) sign x|x0= pos 48. Parmetros formales y guardas Definicin de funciones </p><ul><li>Ejemplos: </li></ul><p>Guardas fact n |n==0 = 1 |n&gt;0= n*fact (n-1) sign x|x0= pos 49. Ajuste de patrones Definicin de funciones </p><ul><li>Una funcinf se describe mediante ecuaciones de la forma: </li></ul><p>fp 1 p k = r </p><ul><li>Lospatrones p 1 , ..., p k son trminos constituidos porconstructores de datosyvariables </li></ul><p> 50. </p><ul><li>Ejemplos: </li></ul><p>length []= 0 length (x:xs) = 1+length xs data Nat = Cero | S Nat first Cero_= [] first (S n) (x:xs)= x:(first n xs)Ajuste de patrones Definicin de funciones 51. </p><ul><li>Ejemplos: </li></ul><p>Patrones Patrones Ajuste de patrones Definicin de funciones length[] = 0 length(x:xs)= 1+length xs data Nat = Cero | S Nat firstCero _ = [] first(S n) (x:xs) = x:(first n xs) 52. Ajuste de patrones Definicin de funciones </p><ul><li>Una expresine se ajusta aun patrnp( pattern matching ) siepuede verse como unaconcrecindep(dando ciertos valores a las variables libres dep ) </li></ul><p> 53. Ajuste de patrones Definicin de funciones </p><ul><li>Ejemplo: la expresinS (S Cero)se ajusta al patrnS xperonoal patrnCero </li></ul><p>S (S Cero) S x Cero S (S Cero) X { x:= S Cero} 54. Ajuste de patrones Definicin de funciones El ajuste de patrones permiteclasificardatosyexplorar / recuperarsubestructuras de los mismos 55. Distincin de casos Definicin de funciones </p><ul><li>Una funcinf se describe mediante ecuaciones de la forma: </li></ul><p>fp 1 p k = case x of q 1-&gt; e 1 ... q n-&gt; e n </p><ul><li>Dondep 1 p k,q 1 q n son patrones,xes una variable ye 1 e n expresiones </li></ul><p> 56. Distincin de casos Definicin de funciones </p><ul><li>Ejemplo: </li></ul><p>length xs = case xs of [ ] -&gt; 0 (y:ys) -&gt; 1+length ys 57. Clusulaswhere Definicin de funciones </p><ul><li>Una funcinf se describe mediante ecuaciones de la forma: </li></ul><p>fp 1 p k = e where l 1= r 1 ... l n= r n </p><ul><li>Dondel 1 l n sonpatroneso partes izquierdas de definiciones de funcin, yr 1 r n son expresiones </li></ul><p> 58. Definicin de funciones </p><ul><li>Ejemplo: </li></ul><p>raicesEc2 a b c = ((-b+d)/a,(-b-d)/a) whered = sqrt(b^2-4*a*c) a = 2*a Clusulaswhere 59. Bibliografa [Bir00]R. Bird. Introduccin a la Programacin Funcional con Haskell. Prentice-Hall, Madrid, 2000. [Dav92]A.J. Davie. An Introduction to Functional Programming Systems Using Haskell. Cambridge University Press, Cambridge, UK, 1992. [Pey03]S. Peyton Jones, editor. Haskell 98: Language and Libraries. The Revised Report. Cambridge University Press, 2003. Pgina WWW de Haskell: http://www.haskell.org 60. : = </p></li></ul>