Skip to content

Commit

Permalink
Cambio ++ por <> en el resto de recursos y añade aviso de versión de GHC
Browse files Browse the repository at this point in the history
  • Loading branch information
mx-psi committed Mar 4, 2019
1 parent 4bc7d2a commit 6406512
Show file tree
Hide file tree
Showing 8 changed files with 28 additions and 30 deletions.
6 changes: 3 additions & 3 deletions Haskell Literario/bintree.lhs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ colocar el nodo y reordenar los órdenes de los subárboles.
\begin{code}
preorder :: Tree a -> [a]
preorder Empty = []
preorder (Node x lft rgt) = preorder lft ++ [x] ++ preorder rgt
preorder (Node x lft rgt) = preorder lft <> [x] <> preorder rgt
\end{code}


Expand Down Expand Up @@ -87,15 +87,15 @@ treesort = preorder . foldl insert Empty
Completando los árboles
------------------

Vamos hacer a los árboles instancias de la clase `Eq`.
Vamos hacer a los árboles instancias de la clase `Eq`.
Podemos delegar la tarea en el compilador incluyendo `deriving Eq` en la
definición, pero vamos a escribirlo nosotros mismos.

\begin{code}
instance (Eq a) => Eq (Tree a) where
Empty == Empty = True
(Node x xl xr) == Empty = False
(Node x xl xr) == (Node y yl yr) = and [x==y, xl==yl, xr==yr]
(Node x xl xr) == (Node y yl yr) = and [x==y, xl==yl, xr==yr]
\end{code}

Inmediatamente podemos usar `(/=)` en árboles.
6 changes: 3 additions & 3 deletions Haskell Literario/quicksort.lhs
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ listas.

\begin{code}
qsort (x:xs) = qsort [y | y<-xs, y<=x]
++ [x]
++ qsort [y | y<-xs, y>x]
<> [x]
<> qsort [y | y<-xs, y>x]
\end{code}


Expand All @@ -32,7 +32,7 @@ Ejemplo
Este programa ordena una lista de números:
\begin{code}
main :: IO ()
main = do putStrLn "Introduzca números a ordenar: "
main = do putStrLn "Introduzca números a ordenar separados por espacios: "
contents <- getLine
let numbers = map read $ words contents :: [Integer]
print $ qsort numbers
Expand Down
12 changes: 6 additions & 6 deletions PrimeraParte/PrimeraParte.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Este notebook contiene el código de una charla dada el día 10 de diciembre de 2016. Para una introducción más extensa puedes leer [estos apuntes](https://github.com/libreim/haskell/blob/master/apuntes/introHaskell.pdf) así como los recursos que enlazan. Idea original y código de [@pedritomelenas](https://github.com/pedritomelenas), con comentarios y modificaciones de [@mx-psi](https://github.com/mx-psi)."
"Este notebook está basado en el código de una charla para Haskell (con GHC 8 o superior) dada el día 10 de diciembre de 2016. Para una introducción más extensa puedes leer [estos apuntes](https://github.com/libreim/haskell/blob/master/apuntes/introHaskell.pdf) así como los recursos que enlazan. Idea original y código de [@pedritomelenas](https://github.com/pedritomelenas), con comentarios y modificaciones de [@mx-psi](https://github.com/mx-psi)."
]
},
{
Expand Down Expand Up @@ -490,14 +490,14 @@
"l1 :: [Int]\n",
"l1 = [1,2,3]\n",
"\n",
"l2 = l1 ++ [4,5] -- Concatenar"
"l2 = l1 <> [4,5] -- Concatenar"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Como vemos, indicamos en el tipo que se trata de una lista de enteros. El operador `++` permite concatenar dos listas, mientras que el operador `:` permite anteponer un elemento a otra lista:"
"Como vemos, indicamos en el tipo que se trata de una lista de enteros. El operador `<>` permite concatenar dos listas, mientras que el operador `:` permite anteponer un elemento a otra lista:"
]
},
{
Expand Down Expand Up @@ -688,7 +688,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"_**Ejercicio**: Define la función `++` que concatena dos listas_"
"_**Ejercicio**: Define la función `<>` que concatena dos listas_"
]
},
{
Expand Down Expand Up @@ -871,7 +871,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"_**Ejercicio**: Define las funciones `++`, `length` y `map` a partir de `foldr`_"
"_**Ejercicio**: Define las funciones `<>`, `length` y `map` a partir de `foldr`_"
]
},
{
Expand Down Expand Up @@ -1211,7 +1211,7 @@
},
"outputs": [],
"source": [
"fmap (++\"!\") [\"Azúcar\", \"Especias\", \"Cosas bonitas\"]"
"fmap (<>\"!\") [\"Azúcar\", \"Especias\", \"Cosas bonitas\"]"
]
},
{
Expand Down
16 changes: 7 additions & 9 deletions PrimeraParte/cons.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
l1 :: [Int]
l1 = [1,2,3]

l2 = l1 ++ [4,5] -- Concatenar
l2 = l1 <> [4,5] -- Concatenar

l3 = 0 : l2 -- Anteponer un elemento
-- l3 == 0:(1:(2:(3:(4:(5:[])))))
Expand Down Expand Up @@ -37,7 +37,7 @@ repeat' a = a : repeat' a

{- Funciones de orden superior -}

-- map f [a1, a2, ..., an] =
-- map f [a1, a2, ..., an] =
-- [f a1, f a2, ..., f an]
map' :: (a -> b) -> [a] -> [b]
map' f [] = []
Expand All @@ -47,11 +47,11 @@ suma1 :: [Int] -> [Int]
suma1 = map (+1)

exclama :: [String] -> [String]
exclama = map (++"!")
exclama = map (<>"!")



-- foldr (⊕) z [a1,...,an] =
-- foldr (⊕) z [a1,...,an] =
-- a1 ⊕ (a2 ⊕ (... ⊕ (an ⊕ z)))
foldr' :: (a -> b -> b) -> b -> [a] -> b
foldr' f z [] = z
Expand All @@ -61,15 +61,15 @@ sum' :: [Int] -> Int
sum' = foldr (+) 0

concat' :: [[a]] -> [a]
concat' = foldr (++) []
concat' = foldr (<>) []




{- Definición de tipos -}

-- data Bool = False | True
-- data Int =
-- data Int =
-- -9223372036854775808|...|-1|0|1|...|9223372036854775807


Expand All @@ -96,7 +96,7 @@ mismaEdad (P _ e1) (P _ e2) = e1 == e2


-- Varios constructores de datos
data Color = RGB Double Double Double
data Color = RGB Double Double Double
| HSV Double Double Double

-- Tipos recursivos
Expand Down Expand Up @@ -124,5 +124,3 @@ data Tree a = Empty | Node a (Tree a) (Tree a)
refl :: Tree a -> Tree a
refl Empty = Empty
refl (Node a t1 t2) = Node a (refl t2) (refl t1)


8 changes: 4 additions & 4 deletions SegundaParte/2.errores.hs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Y parar cuando estemos suficientemente cerca (más cerca que un ε dado).
import Control.Monad
import Text.Printf
printd :: Double -> IO ()
printd = putStrLn . printf "%.3f"
printd = printf "%.3f"

(//) :: Int -> Int -> Double
(//) a b = (fromIntegral a) / (fromIntegral b)
Expand All @@ -18,7 +18,7 @@ printd = putStrLn . printf "%.3f"
-- Implementamos el concepto de límite en una lista infinita buscando hasta
-- encontrar dos términos que se diferencien en menos distancia que épsilon.
--
-- >>> armonic = map (1 //) [1..]
-- >>> armonic = map (1 //) [1..]
-- >>> printd $ limit 0.0000000001 armonic
-- 0.000
--
Expand All @@ -45,7 +45,7 @@ sqroot x = limit 0.003 (iterate (newtonaprox x) x)
-- función que lo resuelva obteniendo sus dos raíces:
data QPol = QPol Double Double Double
instance Show QPol where
show (QPol a b c) = show a ++ "x² + " ++ show b ++ "x + " ++ show c
show (QPol a b c) = printf "%fx² + %fx + %f" a b c

solve :: QPol -> (Double,Double)
solve (QPol a b c) = (sol1,sol2)
Expand All @@ -56,7 +56,7 @@ solve (QPol a b c) = (sol1,sol2)
-- Y podemos comprobar que funciona como esperamos:
--
-- >>> pol = QPol 1 (-5) 6
-- >>> putStrLn $ "Las soluciones de " ++ show pol ++ " son " ++ solve pol
-- >>> putStrLn $ "Las soluciones de " <> show pol <> " son " <> solve pol
-- Las soluciones de 1.0x² + -5.0x + 6.0 son (3.0,2.0)
--
-- ¡Excepto en los casos en los que el discriminante es no positivo!
Expand Down
4 changes: 2 additions & 2 deletions SegundaParte/3.distribuciones.hs
Original file line number Diff line number Diff line change
Expand Up @@ -112,12 +112,12 @@ instance Show (State Seed Int) where
showdist :: Distribution Int -> String
showdist dist = unlines $ map counter [minimum samples..maximum samples]
where samples = fst $ runState (replicateM 50000 dist) 1
counter n = show n ++ ":\t " ++ replicate ((count n samples) `div` (3000 `div` range)) '#'
counter n = show n <> ":\t " <> replicate ((count n samples) `div` (3000 `div` range)) '#'
range = maximum samples - minimum samples + 1

count :: Eq a => a -> [a] -> Int
count x = length . filter (x==)


main :: IO ()
main = return ()
4 changes: 2 additions & 2 deletions SegundaParte/4.parsers.hs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ showexp ex = ex
-- Calcula la tabla de multiplicación del grupo,
-- dados sus generadores y sus relaciones.
multtable :: Group -> Table
multtable (Group gens rels) = Table [[rewrite cs (a ++ b) | a <- nf] | b <- nf]
multtable (Group gens rels) = Table [[rewrite cs (a <> b) | a <- nf] | b <- nf]
where cs = knuthBendix rels
nf = nfs (gens, cs)

Expand Down Expand Up @@ -123,7 +123,7 @@ b ab 1 a
ab b a 1
Grupo diédrico de orden 3. D3
< s,t | ss=1; ttt=1; ts=stt >
< s,t | ss=1; ttt=1; ts=stt >
1 s t st ts tt
s 1 ts tt t st
t st tt ts s 1
Expand Down
2 changes: 1 addition & 1 deletion ejercicios.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ funciones:
- `concat :: [[a]] -> [a]`
- `maximum :: [a] -> a`
- `length :: Num t => [a] -> t`
- `++ :: [a] -> [a] -> [a]`
- `<> :: [a] -> [a] -> [a]`
- `map :: (a -> b) -> [a] -> [b]`
- `filter :: (a -> Bool) -> [a] -> [a]`

Expand Down

0 comments on commit 6406512

Please sign in to comment.