Sei sulla pagina 1di 10

Haskell - Wikipedia, la enciclopedia libre https://es.wikipedia.

org/wiki/Haskell

Haskell
Haskell (pronunciado /hæskəl/)1 es un lenguaje de
programación estandarizado multi-propósito puramente
Haskell
funcional con semánticas no estrictas y fuerte
tipificación estática. Su nombre se debe al lógico
estadounidense Haskell Curry, debido a su aportación al
cálculo lambda, el cual tiene gran influencia en el
lenguaje. En Haskell, "una función es un ciudadano de
primera clase" del lenguaje de programación. Como
lenguaje de programación funcional, el constructor de
controles primario es la función. El lenguaje tiene sus
orígenes en las observaciones de Haskell Curry y sus
descendientes intelectuales. Información general

En los años 1980 se constituyó un comité cuyo objetivo Paradigma Funcional, no estricto,
era crear un lenguaje funcional que reuniera las modular, fuertemente
tipificado
características de los múltiples lenguajes funcionales de
la época, el más notable Miranda, y resolviera la Apareció en 1990
confusión creada por la proliferación de los mismos. Diseñado por Universidad de Yale,
Universidad de Glasgow
El lenguaje evoluciona rápidamente y (ver más abajo)
Sistema de tipos Fuerte, estático
como los representantes actuales del estándar de facto.
Implementaciones GHC, Hugs, NHC, Yhc, JHC
El último estándar oficial es: Haskell 2010
Influido por Miranda, Orwell, ML, Gofer
(https://wiki.haskell.org/Haskell_2010), cuyas
diferencias respecto al anterior estándar Haskell 98 Ha influido a Python, Java, C#, Scala
(https://www.haskell.org/onlinereport/) son: [editar datos en Wikidata]

Nuevas características del lenguaje:

Interfaz de funciones foráneas (FFI), que permite usar código C en un programa Haskell y código Haskell en
un programa C. Un ejemplo explicativo se puede encontrar aquí (https://wiki.haskell.org/FFI_Introduction)
Nombres jerárquicos para los módulos, por ejemplo Data.Bool.
Guardianes con patrones.
Características eliminadas del lenguaje:

Sintaxis de patrones (n+k). Con lo cual, la siguiente definición de la función factorial no es válida en Haskell
2010 y posteriores: fact (n+1) = (n+1) * fact n.
Las características más interesantes de Haskell incluyen el soporte para tipos de datos y funciones recursivas,
listas, tuplas, guardas y encaje de patrones. La combinación de las mismas pueden resultar en algunas funciones
casi triviales cuya versión en lenguajes imperativos pueden llegar a resultar extremadamente tediosas de
programar. Haskell es, desde 2002, uno de los lenguajes funcionales sobre los que más se ha investigado. Se han
desarrollado muchas variantes:

Versiones paralelas del MIT y Glasgow, ambas denominadas Parallel Haskell.


Más versiones paralelas y distribuidas de Haskell llamadas Distributed Haskell (anteriormente Goffin) y Eden
Una versión con ejecución especulativa: Eager Haskell
Varias versiones orientadas a objetos: Haskell++, O'Haskell y Mondrian.

1 de 10 11/10/2018 20:43
Haskell - Wikipedia, la enciclopedia libre https://es.wikipedia.org/wiki/Haskell

Una versión educativa llamada Gofer desarrollada por Mark Jones que fue suplantada por Hugs (ver abajo).
Para información más detallada, referirse al sitio oficial o a los enlaces al final de este artículo.

Índice
Historia
Tipos simples predefinidos
El tipo Bool
Funciones y operadores
El tipo Int
El tipo Integer
El tipo Float
Funciones y operadores
El tipo Double
El tipo Char
Tuplas
Listas
Implementaciones
Entornos de desarrollo
Open Source
Comerciales
Web Frameworks
Happstack
Snap
Yesod
Miku
Lemmachine
Mohws
Salvia
Scotty
Servant
MFlow
Spock
Wheb
WebAPI
Comunidad
The Haskell Symposium
The Summer of Haskell
Ejemplos
Véase también
Notas y referencias
Bibliografía
Enlaces externos

Historia
A partir de la publicación de Miranda, en 1985, los lenguajes funcionales proliferaron. En 1987, existían
compitiendo entre ellos más de una docena de lenguajes de programación puros funcionales no estrictos. Durante

2 de 10 11/10/2018 20:43
Haskell - Wikipedia, la enciclopedia libre https://es.wikipedia.org/wiki/Haskell

la conferencia sobre Lenguajes de Programación Funcional y Arquitecturas de Ordenador (FPCA '87) en Portland,
Oregón, se mantuvo un encuentro durante el cual se alcanzó un fuerte consenso entre sus participantes para
formar un comité que definiese un estándar abierto para tales lenguajes. Esto se hizo con el propósito expreso de
consolidar los lenguajes existentes en uno único que sirviera como base para la investigación futura en diseño de
lenguajes.2 La primera versión de Haskell ("Haskell 1.0") se definió en 1990.3 Los esfuerzos del comité resultaron
en una serie de definiciones del lenguaje, que culminaron a finales de 1997 en Haskell 98, que se intentó fuera
una versión del lenguaje mínima, estable y portable, junto con una biblioteca estándar asociada para la enseñanza,
y como base de futuras extensiones. El comité expresamente aprobó la creación de extensiones y variantes de
Haskell 98 mediante la adición e incorporación de características experimentales.

En enero de 1999, el estándar del lenguaje Haskell 98 se publicó en "The Haskell 98 Report". En enero de 2003, se
publicó una versión revisada en "Haskell 98 Language and Libraries: The Revised Report".4 El lenguaje continúa
evolucionando rápidamente, con las implementaciones de Hugs y de GHC (véase más adelante), que representan el
actual estándar de facto. A principios del 2006 comenzó el proceso de definición de un sucesor del estándar de
Haskell 98, llamado informalmente Haskell′ ("Haskell Prime").5 Este proceso intenta producir una revisión
menor de Haskell 98.6 En 2010 se lanza Haskell 2010 (https://wiki.haskell.org/Haskell_2010).

Tipos simples predefinidos


En Haskell, y en lo siguiente, "o :: t" quiere decir que el objeto "o" es miembro del tipo "t", y "t -> s" es un tipo,
especificamente una funcion, que consume algo de tipo "t" y produce algo de tipo "s". El operador (->) se nida por
el derecho, ya que "t -> s -> r" quiere decir "t -> (s -> r)".

El tipo Bool
Los valores con este tipo representan expresiones lógicas cuyo resultado puede ser True o False.

Funciones y operadores

(&&) :: Bool -> Bool -> Bool. Conjunción lógica.


(||) :: Bool -> Bool -> Bool. Disyunción lógica.
not :: Bool -> Bool. Negación lógica.
otherwise :: Bool. Función constante que devuelve el valor True.

El tipo Int
Los valores de este tipo son números enteros de precisión limitada que cubren al menos el intervalo [-2^29, 2^29 -
1] ([minBound, maxBound]).

El tipo Integer
Los valores de este tipo son números enteros de precisión ilimitada que tienen las mismas funciones y operadores
del tipo Int.

El tipo Float
Los valores de este tipo son números reales. ( 2010, 23.4, 5.7 )

Funciones y operadores

3 de 10 11/10/2018 20:43
Haskell - Wikipedia, la enciclopedia libre https://es.wikipedia.org/wiki/Haskell

(+), (-), (*), (/), (^) :: Float -> Float -> Float. Suma, resta, producto, división real y
potencia de exponente entero.
abs, signum, negate :: Int -> Int. Valor absoluto, signo y negación.
(**) :: Float -> Float. Potencia de exponente real

El tipo Double
Los valores de este tipo son números reales, de mayor rango y con aproximaciones más precisas que los de tipo
Float.

El tipo Char
Los valores de este tipo son caracteres que se encuentran en una masa de alta complejidad de en una suma de
caracteres dados con su alta definición

Antes de utilizar esta función en hugs debemos utilizar IMPORT CHAR antes de nuestro algoritmo

Tuplas
Los elementos que forman una tupla pueden ser del mismo o de distintos tipos. Es un conjunto de componentes
relacionados. Por ejemplo: ('a', True,3)

Listas
Los valores de este tipo son una colección de elementos del mismo tipo. Existen dos constructores para listas:

[Elementos_separados_por_comas], por ejemplo: [1,2,3,4]


(primer_elemento:resto_de_la_lista), por ejemplo: (1:(2:(3:(4:[]))))

Implementaciones
Todas las siguientes implementaciones cumplen en su totalidad, o casi en su totalidad, con los estándares de
Haskell 98 y son distribuidas bajo licencias Open Source. No se conocen implementaciones comerciales del
lenguaje.

Hugs ([1] (http://www.haskell.org/hugs/)) es un intérprete. Ofrece una compilación rápida de los programas y
un tiempo razonable de ejecución. También viene con una biblioteca gráfica muy simple, lo que lo hace
adecuado para quienes lo están aprendiendo. Sin embargo no es una implementación a despreciar, es una
de las más livianas y compatibles.
GHC ([2] (http://www.haskell.org/ghc/)): "Glasgow Haskell Compiler" compila a código nativo en una variedad
de arquitecturas y puede también compilar a C. Es, probablemente, uno de los compiladores más populares e
incluso tiene unas cuantas bibliotecas (por ejemplo OpenGL) que, aunque muy útiles, sólo funcionan bajo
GHC.
nhc98 ([3] (http://www.cs.york.ac.uk/fp/nhc98/)) es otro compilador con un mejor tiempo de ejecución que
Hugs. Esta implementación se enfocó a minimizar la utilización de la memoria convirtiéndola en una buena
opción para arquitecturas lentas o antiguas.
HBC ([4] (http://www.cs.chalmers.se/~augustss/hbc/hbc.html)) es otro compilador a código nativo de Haskell.
Si bien no ha sido actualizado en el último tiempo sigue siendo bastante útil.
Helium ([5] (https://web.archive.org/web/20041230135916/http://www.cs.uu.nl/helium/)) es un nuevo dialecto
de Haskell. Se centró en ser muy fácil de aprender; por ello, no incluye soporte para todo el estándar de
Haskell, haciendo que no sea totalmente compatible.

Entornos de desarrollo

4 de 10 11/10/2018 20:43
Haskell - Wikipedia, la enciclopedia libre https://es.wikipedia.org/wiki/Haskell

Existen varios IDEs (Integrated Development Environment, o en español, entornos de desarrollo integrado) y/o
plugins que se pueden utilizar para desarrollar aplicaciones en Haskell. La mayoría son open source, pero también
existen de índole comercial.

Open Source
IntelliJ plugin for Haskell
EclipseFP plugin for Eclipse IDE
Colorer plugin for Eclipse IDE
Leksah
KDevelop
Vim
Emacs
Atom

Comerciales
Haskell for Mac
Sublime-Haskell

Web Frameworks
La comunidad de desarrollo web en Haskell ha tenido recientemente un gran impulso en la actividad, lo que
resulta en una gran cantidad de opciones de bibliotecas para utilizar.7 A continuación se presenta la lista de
framework activos en Haskell para desarrollo web.

Happstack
Está diseñado para que los desarrolladores puedan prototipar rápidamente, implementar sin dolor, escalar
masivamente, operar confiablemente y cambiar fácilmente. Soporta entornos GNU/Linux, macOS, FreeBSD y
Windows.

Se considera un framework web completo, el principal componente es happstack-server: un servidor HTTP


integrado, combinadores de enrutamiento y fileserving. Además, una serie de paquetes que solían ser acoplados a
Happstack ahora han sido desacoplados de él, pero siguen promocionados y documentados para su uso con
Happstack:

Safecopy: soporte de serialización y migración de tipos de datos


Acid-state: un sistema de almacenamiento NoSQL ACID con soporte nativo para tipos Haskell

Snap
Es un framework de desarrollo web basado en una arquitectura snaplet.

Tiene una completa documentación y cuenta con una suite de pruebas con un alto nivel de cobertura de código,
pero es un software de etapa inicial con interfaces en constante evolución

Yesod
Está diseñado para aplicaciones web RESTful, de tipo seguro y con alto rendimiento.

5 de 10 11/10/2018 20:43
Haskell - Wikipedia, la enciclopedia libre https://es.wikipedia.org/wiki/Haskell

Aprovechando la cuasi-cotización para las tareas más fáciles, se provee aplicaciones web concisas con altos niveles
de seguridad. Las plantillas de Hamlet (http://www.yesodweb.com/book/shakespearean-templates) se
comprueban en tiempo de compilación para ver si son correctas y el controlador utiliza URL seguras para
asegurarse de que sólo está generando URL válidas. Sigue los principios del Modelo-Vista-Controlador de forma
holgada.

Miku
Una biblioteca sencilla para el rápido prototipado web en Haskell, inspirada en Ruby's Rack
(http://rack.github.io/) y Sinatra (http://www.sinatrarb.com/).

Lemmachine
Es un RESTful web framework. La arquitectura principal es una copia de Webmachine (https://github.com
/webmachine/webmachine/wiki) basada en Erlang, que es actualmente la mejor referencia de documentación. Se
destaca por su dinámico Webmachine escrito de forma tipada dependiente en Agda.

Mohws
Es un servidor web con un sistema de módulos y soporte para CGI. Basado en el Servidor Web Haskell original de
Simon Marlow.

Salvia
Es un servidor web y un framework de aplicaciones web que puede ser utilizado para escribir sitios web dinámicos
en Haskell. Desde el código de protocolo de nivel inferior hasta el código de aplicación de alto nivel, todo está
escrito como un controlador de Salvia. Este enfoque hace que el servidor sea extremadamente extensible.

Scotty
Es un framework web inspirado en Sinatra de Ruby, usando WAI y Warp. Es una manera sencilla de escribir
aplicaciones web RESTful y declarativas. Tiene buena documentación para todas las funciones relevantes.

Servant
Es un framework ligero principalmente para APIs REST. Permite especificar las especificaciones de una API como
alias de tipo y luego trabajar con estos alias de tipo para crear servidores, documentación, código de cliente en
Haskell y Javascript. Está basado en WAI.

MFlow
Es un servidor de aplicaciones web. MFlow es una abreviatura de "Flujo de mensajes". Se trata de un framework
basado en la continuación, en lugar de otros frameworks basados en la continuación como Ocsigen
(http://ocsigen.org/) (Ocaml), Coccoon (javascript) o Seaside (http://seaside.st/) (Smalltalk), se basa en una
mónada de retroceso que mantiene la sincronización del estado de ejecución con la navegación del usuario. Desde
la discontinuación de WASH (http://www2.informatik.uni-freiburg.de/~thiemann/WASH/), MFlow es el único
marco de estilo de continuación escrito en Haskell hasta la fecha.

Utiliza las bibliotecas web Haskell estándares y/o técnicas: WAI (https://hackage.haskell.org/package/wai-

6 de 10 11/10/2018 20:43
Haskell - Wikipedia, la enciclopedia libre https://es.wikipedia.org/wiki/Haskell

middleware-rollbar), Warp (https://hackage.haskell.org/package/warp), Blaze HTML, HSP. Su núcleo es el


servidor y la renderización independiente. Una clase de formlets extendidos se utilizan para crear componentes
autónomos, llamados widgets. Tienen formato, AJAX y código de servidor. Se pueden componer para crear la
interfaz de usuario.

Spock
Es un framework orientado al rápido desarrollo web: Ofrece todo lo necesario para iniciar rápidamente el hacking
web con Haskell: enrutamiento, middleware, json, blaze, sesiones, cookies, ayudante de base de datos, protección
csrf, estado global.

Wheb
Es un framework WAI para crear aplicaciones web robustas, de alta concurrencia, simples y efectivas. Su objetivo
principal es ampliar la funcionalidad de la base de la biblioteca WAI y proporcionar un punto de entrada fácil en
los servidores web de Haskell. Facilita la creación de plugins. Los plugins pueden agregar rutas, middleware,
configuraciones e incluso manejar la limpieza de recursos en el apagado del servidor. Las rutas denominadas
permiten a los plugins generar dinámicamente sus rutas en tiempo de ejecución basadas en la configuración

WebAPI
WebApi es una biblioteca ligera basada en WAI que permite definir peticiones y respuestas para los puntos finales
como tipos a través de un contrato. El contrato se considera la única fuente de verdad, con lo que WebApi permite
crear servicios Web / API REST, generar un cliente Haskell para los servicios existentes de la API, generar un
servidor simulador para simular las solicitudes y respuestas.

Comunidad

The Haskell Symposium


"The Haskell Symposium" es un simposio anual organizado por la International Conference on Functional
Programming (ICFP). El simposio está patrocinado por la Association for Computing Machinery (ACM), bajo los
auspicios del ACM Special Interest Group on programming languages (SIGPLAN).

El propósito del evento es discutir la experiencia de los programadores con Haskell, y el futuro desarrollo del
lenguaje. El alcance del simposio incluye todos los aspectos del diseño, la semántica, la teoría, la aplicación, la
ejecución, y la enseñanza de Haskell.

Antes de 2008, el evento era conocido como "The Haskell Workshop". El cambio de nombre refleja el aumento
constante de la influencia del evento en la comunidad en general, así como un creciente número de presentaciones
de alta calidad que hacen el proceso de aceptación muy competitivo.

The Summer of Haskell


"The Summer of Haskell" es un evento organizado por haskell.org para llegar a los estudiantes y animarles a
contribuir a la comunidad Haskell con la ayuda de mentores experimentados. Este programa está abierto a
estudiantes universitarios, mayores de 18 años, en la mayoría de los países.

7 de 10 11/10/2018 20:43
Haskell - Wikipedia, la enciclopedia libre https://es.wikipedia.org/wiki/Haskell

Ejemplos
Función recursiva para calcular el factorial de un número natural:

--Función recursiva que calcula el factorial de un número natural


factorial :: Integer -> Integer
factorial n
| n < 0 = error "no existe el factorial para enteros negativos"
| n == 0 = 1
| otherwise = n * factorial (n-1)

Otra versión de la función para calcular el factorial de un natural usando la función product del módulo Data.List
(https://hackage.haskell.org/package/base-4.7.0.2/docs/Data-List.html):

--Función para calcular el factorial de un entero usando la función product del módulo Data.List
factorial :: Integer -> Integer
factorial n
| n < 0 = error "no existe el factorial para enteros negativos"
| n == 0 = 1
| otherwise = product [1..n]

Función sumatorio de los elementos de una lista de enteros

--Sumar elementos de una lista


sumar :: [Int] -> Int
sumar [] = 0
sumar (x:xs) = x+sumar(xs)

Función para calcular las raíces de una ecuación de segundo grado a partir de sus coeficientes

--Función para calcular las raíces de una ecuación de segundo grado a partir de sus coeficientes
raíces :: Float -> Float -> Float -> (Float, Float)
raíces a b c
| disc >= 0 = ((-b + raizDisc) / denom,
(-b - raizDisc) / denom)
| otherwise = error "La ecuación tiene raíces complejas"
where
disc = b*b - 4*a*c
raizDisc = sqrt disc
denom = 2*a

Función que aproxima el número e

--Función para calcular el valor de e (2.71828182845905)


euler :: Double -> Double
euler 0.0 = 1.0
euler n = 1.0 / product [1..n] + euler (n - 1.0)

--Algoritmo de ordenación quicksort


qs::Ord a=>[a]->[a]
qs [] = []
qs (p:xs) = qs [x|x<-xs,x<p] ++ [p] ++ qs [x|x<-xs,x>=p]

Función para calcular el máximo común divisor de dos números enteros mediante el algoritmo de Euclides

mcd::Int->Int->Int
mcd x 0 = x
mcd x y = mcd y (mod x y)

Función que realiza la criba de Eratóstenes (de una lista dada deja solo los números primos)

eratostenes :: [Int] -> [Int]


eratostenes [] = []

8 de 10 11/10/2018 20:43
Haskell - Wikipedia, la enciclopedia libre https://es.wikipedia.org/wiki/Haskell

eratostenes (x:xs) | not (null xs) && x^2 > last xs = (x:xs)
| otherwise = x: eratostenes [y | y <- xs, y `mod` x /= 0]

Función que determina si un número natural es palíndromo (en base 10)

isPalindrome :: Int -> Bool


isPalindrome n | n < 0 = False
| otherwise = let s = show n
in s == (reverse s)

Función que realiza la potencia de un número con recursividad dividiendo el expediente entre 2

potencia :: Double -> Int -> Double


potencia b e = if e < 0 then 1 / (potencia b (-e))
else if e == 0 then 1
else let p = potencia b (e `div` 2)
in if e `mod` 2 == 1 then p * p * b else p * p

Función que generaría una lista potencialmente infinita de los números primos, utilizando una cláusula where y
listas intencionales

numerosPrimos :: [Integer]
numerosPrimos = filtrarPrimos [1..]
where filtrarPrimos (x:xs) =
x : filtrarPrimos [p | p <- xs, p `mod` x /= 0]

Implementación del algoritmo Quicksort

qsort :: (Ord a) => [a] -> [a]


qsort [] = []
qsort (x:xs) = qsort menor ++ [x] ++ qsort mayor
where
menor =
filter (\e -> e `compare` x == LT) xs
mayor =
filter (\e -> e `compare` x == GT) xs

Véase también
QuickCheck

Notas y referencias
1. Chevalier, Tim (28 de enero de 2008), «anybody can tell me the pronuncation of "haskell"?
(http://www.haskell.org/pipermail/haskell-cafe/2008-January/038756.html)», lista de correo Haskell-cafe,
http://www.haskell.org/pipermail/haskell-cafe/2008-January/038756.html, consultado el 12 de marzo de 2011.
2. «Preface» (http://haskell.org/onlinereport/preface-jfp.html). Haskell 98 Language and Libraries: The Revised
Report. diciembre de 2002.
3. «The History of Haskell» (https://web.archive.org/web/20090429085841/http://haskell.org/haskell-history.html).
Archivado desde el original (http://www.haskell.org/haskell-history.html) el 29 de abril de 2009.
4. Simon Peyton Jones (diciembre de 2002). «Haskell 98 Language and Libraries: The Revised Report»
(http://haskell.org/onlinereport/).
5. «Future development of Haskell» (http://haskell.org/haskellwiki/Future).
6. «Welcome to Haskell' » (http://hackage.haskell.org/trac/haskell-prime). The Haskell' Wiki.
7. «Web - HaskellWiki» (https://wiki.haskell.org/Web). wiki.haskell.org (en inglés). Consultado el 26 de junio de
2017.

Bibliografía

9 de 10 11/10/2018 20:43
Haskell - Wikipedia, la enciclopedia libre https://es.wikipedia.org/wiki/Haskell

Ruiz, Blas; Gutiérrez, Francisco; Guerrero, Pablo; y Gallardo, José. Razonando con Haskell. Un curso sobre
programación funcional. Thomson.

Enlaces externos
Español:

Introducción a Haskell (http://horru.lsi.uniovi.es/~labra/FTP/IntHaskell98.pdf)


Lenguaje de Programación Funcional Haskell (https://web.archive.org/web/20070504042306/http:
//www.frt.utn.edu.ar/sistemas/paradigmas/Haskell.htm) Haskell Básico
Una Introducción Agradable a Haskell (http://www.lcc.uma.es/~blas/pfHaskell/gentle/index.html) Versión en
español del libro "A Gentle Introduction to Haskell".
¡Aprende Haskell por el bien de todos! (http://aprendehaskell.es/) Traducción de la obra "Learn you a Haskell
for great good".
Haskell Básico (https://www.youtube.com/watch?v=YAKTlImnS-
g&list=PLraIUviMMM3fbHLdBJDmBwcNBZd_1Y_hC&index=1) Curso de Haskell
Inglés:

Haskell (http://www.haskell.org) Página oficial de Haskell


Haskell in examples (https://github.com/politrons/Dive_into_Haskell) Examples of how to use Haskell
Try Haskell (http://tryhaskell.org/) Prueba Haskell online
A Gentle Introduction to Haskell 98 (http://www.haskell.org/tutorial/) (pdf (http://www.haskell.org/tutorial
/haskell-98-tutorial.pdf) format) Una simple introducción a Haskell 98
The Evolution of a Haskell Programmer (http://www.willamette.edu/~fruehr/haskell/evolution.html) Una forma
cómica de ver los distintos estilos de programación en Haskell
Online Bibliography of Haskell Research (https://web.archive.org/web/20080915054919/http:
//haskell.readscheme.org/) Bibliografía de investigaciones en Haskell
Haskell (programming language)
Learn You a Haskell for Great Good (http://learnyouahaskell.com/)
Implementaciones:

Hugs (http://haskell.org/hugs/) Haskell User's Gofer System


GHC (http://haskell.org/ghc/) The Glasgow Haskell Compiler
Helium (http://www.cs.uu.nl/wiki/Helium), Helium

Obtenido de «https://es.wikipedia.org/w/index.php?title=Haskell&oldid=110838414»

Esta página se editó por última vez el 25 sep 2018 a las 04:02.

El texto está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0; pueden aplicarse
cláusulas adicionales. Al usar este sitio, usted acepta nuestros términos de uso y nuestra política de privacidad.
Wikipedia® es una marca registrada de la Fundación Wikimedia, Inc., una organización sin ánimo de lucro.

10 de 10 11/10/2018 20:43

Potrebbero piacerti anche