PDF de programación - Guía Rápida de Haskell

Imágen de pdf Guía Rápida de Haskell

Guía Rápida de Haskellgráfica de visualizaciones

Actualizado el 5 de Febrero del 2021 (Publicado el 6 de Agosto del 2017)
2.302 visualizaciones desde el 6 de Agosto del 2017
178,8 KB
15 paginas
Creado hace 14a (15/09/2009)
Guía Rápida de Haskell

Cadenas

Esta guía rápida abarca los elementos fundamen-
tales del lenguaje Haskell: sintaxis, palabras clave
y otros elementos. Se presenta como un archivo
ejecutable de Haskell y también como un docu-
mento para impresión. Cargue la fuente en su in-
térprete favorito para jugar con los ejemplos de
código mostrados.

Sintaxis Básica

Comentarios

Un comentario de una sola línea comienza con ‘--’
y se extiende hasta el final de la línea. Los co-
mentarios de varias líneas comienzan con ’{-’ y se
extienden hasta ’-}’. Los comentarios pueden ser
anidados.

Los comentarios antes de las definiciones de
función deben comenzar con ‘{- |’ y los que es-
tán junto a los tipos de parámetros con ‘-- ^’ para
que sean compatibles con Haddock, un sistema
para documentar código en Haskell.

Palabras Reservadas

Las siguientes palabras están reservadas para
Haskell. Es un error de sintaxis darle a una vari-
able o a una función uno de estos nombres.

• case
• class
• data
• deriving
• do• else
• if

• import
• in• infix
• infixl
• infixr
• instance
• let

• of• module
• newtype
• then
• type
• where

c 2009 Justin Bailey.

• "abc" – Cadena Unicode string, azúcar sin-
• 'a' – Un solo caracter.

táctica de ['a','b','c'].

Cadenas en varias líneas Normalmente, es
un error de sintaxis si una cadena contiene car-
acteres de fin de línea. Eso es, esto es un error de
sintaxis:

string1 = "My long
string."

Se pueden emplear barras diagonales inversas
(‘\’) para hacer “escape” de un fin de línea:

string1 = "My long \
\string."

El área entre las barras diagonales inversas es ig-
norada. Los fines de línea en la cadena deben ser
representados explícitamente:

string2 = "My long \n\
\string."

Eso es, string1 evalúa como

My long string.

Mientras string2 evalúa como:

My long
string.

Códigos de escape
Los siguientes códigos de
escape pueden ser utilizados en caracteres o cade-
nas:
• \n, \r, \f, etc. – Los códigos estándar para
fin de línea, retorno de carro, avance de
línea, etc.
• \72, \x48,

texto110 – Un caracter con el valor 72 en dec-
imal, hexadecimal y octal, respectivamente.
• \& – El caracter de escape “null”, es utilizado
para que los códigos de escape numéri-
cos puedan aparecer junto de las literales
numéricas. Es equivalente a “” y por lo tanto
no puede ser utilizado en literales de carac-
ter.

Números

• 1 – Entero o valor de punto flotante.
• 1.0, 1e10 – Valor de punto flotante.
• 0o1, 0O1 – Valor octal.
• 0x1, 0X1 – Valor hexadecimal.
• -1 – Número negativo; el signo de menos

(“-”) no puede ir separado del número.

Enumeraciones

101, 102, . . .

.

• [1..10] – Lista de números – 1, 2, . . ., 10.
• [100..] – Lista infinita de números – 100,
• [110..100] – Lista vacía;
mente avanzan hacia adelante.
• [0, -1 ..] – Enteros negativos.
• [-110..-100] – Error de sintaxis; necesita
• [1,3..99], [-1,3..99] – Lista de 1 a 99, de

[-110.. -100] por los negativos.

los rangos sola-

2 en 2; y de -1 a 99, de 4 en 4.

1

[email protected]

De hecho, se puede usar cualquier valor que esté
en la clase Enum:
• ['a' .. 'z'] – Lista of caracteres – a, b,
• [1.0, 1.5 .. 2] – [1.0,1.5,2.0].
• [UppercaseLetter ..] – Lista de valores

. . ., z.

GeneralCategory (en Data.Char).

Listas & Tuplas

son listas).

listas usando “cons” (:) y “nil” ([]).

• [] – Lista vacía.
• [1,2,3] – Lista de tres números.
• 1 : 2 : 3 : [] – Forma alterna de escribir
• "abc" – Lista de tres caracteres (las cadenas
• 'a' : 'b' : 'c' : [] – Lista de caracteres
• (1,"a") – Tupla de dos elementos, un
• (head, tail, 3, 'a') – Tupla de cuatro el-
ementos, dos funciones, un número y un car-
acter.

(lo mismo que "abc").

número y una cadena.

Regla “Layout”, llaves y punto y comas

Se puede escribir Haskell utilizando llaves y punto
y comas, igual que en C. Sin embargo, nadie lo
hace. En lugar de eso se emplea la regla “layout”,
donde se emplea espacio en blanco para separar
contextos. La regla general es: siempre usar san-
grías. Cuando el compilador se queje, usar más.

ser utilizados al definir el cuerpo de una función.
Por ejemplo, esto no compila:

square2 x = { x * x; }

Sin embargo, esto funciona bien:

square2 x = result

where { result = x * x; }

Definición de funciones Aplique una sangría
de al menos un espacio a partir del nombre de la
función:

square x =

x * x

A menos que esté presente una cláusula where. En
ese caso, aplique la sangría de la cláusula where al
menos un espacio a partir del nombre de la fun-
ción y todos los cuerpos de la función al menos a
un espacio a partir de la palabra clave where:

square x =

x2

where x2 =

x * x

Let Aplique sangría sobre el cuerpo del let al
menos un espacio a partir de la primera definición
en el let. Si el let aparece por sí solo en una línea,
el cuerpo de cualquier definición debe aparecer en
la columna después del let:

Llaves y punto y comas
Los paréntesis final-
izan una expresión, y las llaves representan con-
textos. Pueden ser utilizados después de varias
palabras clave: where, let, do y of. No pueden

square x =
let x2 =

x * x

in x2

Como se puede ver arriba, la palabra clave in2
debe también estar en la misma columna que el
let. Finalmente, cuando se van múltiples defini-
ciones, todos los identificadores deben aparecer en
la misma columna.

Declaraciones, Etc.

La siguiente sección describe las reglas para la
declaración de funciones, las listas por compren-
sión, y otras áreas del lenguaje.

Definición de Funciones

Las funciones se definen declarando su nombre,
los argumentos, y un signo de igual:

square x = x * x

Todos los nombres de función deben comenzar con
letra minúscula o “_”. Es un error de sintaxis de
cualquier otra forma.

Comparación de patrones
Se pueden definir
varias “cláusulas” de una función haciendo “com-
paración de patrones” en los valores de los argu-
mentos. Aquí, la función agree tiene cuatro casos
separados:

-- Coincide cuando se da la cadena "y".
agree1 "y" = "Great!"
-- Coincide cuando se da la cadena "n".
agree1 "n" = "Too bad."
-- Coincide cuando se da una cadena que
-- comienza con 'y'.
agree1 ('y':_) = "YAHOO!"
-- Coincide con cualquier otro valor.
agree1 _ = "SO SAD."

c 2009 Justin Bailey.

2

[email protected]

Nótese que el caracter ‘_’ es un comodín y co-

incide con cualquier valor.

La comparación de patrones se puede extender
a valores anidados. Asumiendo esta declaración
de dato:

data Bar = Bil (Maybe Int) | Baz

y recordando la definición de Maybe de la página 8
podemos hacer coincidir en valores Maybe anida-
dos cuando Bil está presente:

f (Bil (Just _)) = ...
f (Bil Nothing) = ...
f Baz = ...

La comparación de patrones también permite que
valores sean asociados a variables. Por ejemplo,
esta función determina si la cadena dada es o no
vacía. Si no, el valor asociado a str es convertido
a minúsculas:

toLowerStr [] = []
toLowerStr str = map toLower str

Nótese que aquí str es similar a _ en que va a co-
incidir con lo que sea; la única diferencia es que al
valor que coincide también se le da un nombre.

n + k Patterns
Esta (a veces controversial) com-
paración de patrones hace fácil coincidir con cier-
tos tipos de expresiones numéricas. La idea es
definir un caso base (la porción “n”) con un
número constante para que coincida, y después
definir las coincidencias (la porción “k”) como
sumas sobre el caso base. Por ejemplo, esta es una
forma ineficiente de determinar si un número es o
no par:

c 2009 Justin Bailey.

isEven 0 = True
isEven 1 = False
isEven (n + 2) = isEven n

Captura de Argumentos
La captura de argu-
mentos es útil para comparar un patrón y uti-
lizarlo, sin declarar una variable extra. Utilice un
símbolo ‘@’ entre el patrón a coincidir y la variable
a la cual asociar el valor. Este mecanismo se utiliza
en el siguiente ejemplo para asociar el primer ele-
mento de la lista en l para mostrarlo, y al mismo
tiempo asociar la lista completa a ls para calcular
su longitud:

len ls@(l:_) = "List starts with " ++

show l ++ " and is " ++
show (length ls) ++ " items long."

len [] = "List is empty!"

Guardas
Las funciones booleanas se pueden
utilizar como “guardas” en definicione de función
al mismo tiempo que la comparación de patrones.
Un ejemplo sin comparación de patrones:

which n

| n == 0 = "Cero"
| even n = "Par"
| otherwise = "Impar"

what [] = "Cadena vacía"
what (c:_)

| isUpper c = "Mayúscula"
| isLower c = "Minúscula"
| otherwise = "No es letra"

Comparación & Orden de las Guardas
La
comparación de patrones procede en un orden de
arriba hacia abajo. De la misma forma, las expre-
siones con guarda son evaluadas de la primera a
la última. Por ejemplo, ninguna de estas funciones
sería muy interesante:

allEmpty _ = False
allEmpty [] = True

alwaysEven n

| otherwise = False
| n `div` 2 == 0 = True

Sintaxis de Registros Normalmente la com-
paración de patrones ocurre basándose en la posi-
ción en los argumentos del valor a coincidir. Los
tipos que se declaran con sintaxis de registro, sin
embargo, pueden coincidir basándose en los nom-
bres en el registro. Dado el siguiente tipo de datos:

data Color = C { red

, green
, blue :: Int }

Note el otherwise – siempre evalúa verdadero y
puede ser utilizado para especificar un caso por
“default”.

Las guardas se pueden utilizar con patrones.
El siguiente ejemplo es una función que determina
si el primer caracter en una cadena es mayúscula
o minúscula:

podemos hacer coincidir solamente green:

isGreenZero (C { green = 0 }) = True
isGreenZero _ = False

Es posible capturar argumentos con esta sintaxis,
aunque se vuelve incómodo. Continuando con el

3

[email protected]

ejemplo, podemos definir un tipo Pixel y una fun-
ción que reemplace con negro valores con compo-
nente green diferente de cero:

data Pixel = P Color

-- El valor del color no se
-- modifica si green es 0
setGreen (P col@(C {green = 0})) = P col
setGreen _ = P (C 0 0 0)

Esta sintaxis,

Patrones Perezosos
también
conocida como patrones irrefutables, permite hacer
comparación d
  • Links de descarga
http://lwp-l.com/pdf6134

Comentarios de: Guía Rápida de Haskell (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad