sumaPol :: (Num a, Eq a) => Polinomio a -> Polinomio a -> Polinomio a
multPorTerm :: Num a => (Int,a) -> Polinomio a -> Polinomio a
multPol :: (Eq a, Num a) => Polinomio a -> Polinomio a -> Polinomio a
sumaPol :: (Num a, Eq a) => Polinomio a -> Polinomio a -> Polinomio a
multPorTerm :: Num a => (Int,a) -> Polinomio a -> Polinomio a
multPol :: (Eq a, Num a) => Polinomio a -> Polinomio a -> Polinomio a
tales que
(sumaPol p q) es la suma de los polinomios p y q. Por ejemplo,
importqualified Data.Map as M
type Polinomio a = M.Map Int a
ejPol1, ejPol2 :: Polinomio Int
ejPol1 = M.fromList [(0,3),(1,7),(3,-5)]
ejPol2 = M.fromList [(0,4),(3,5),(5,1)]
sumaPol ::(Num a, Eq a)=> Polinomio a -> Polinomio a -> Polinomio a
sumaPol p q =
M.filter(/=0)(M.unionWith (+) p q)
multPorTerm ::Num a =>(Int,a)-> Polinomio a -> Polinomio a
multPorTerm (n,a) p =
M.map(*a)(M.mapKeys (+n) p)
multPol ::(Eq a, Num a)=> Polinomio a -> Polinomio a -> Polinomio a
multPol p q
| M.null p = M.empty
|otherwise= sumaPol (multPorTerm t q)(multPol r q)where(t,r)= M.deleteFindMin p
import qualified Data.Map as M
type Polinomio a = M.Map Int a
ejPol1, ejPol2 :: Polinomio Int
ejPol1 = M.fromList [(0,3),(1,7),(3,-5)]
ejPol2 = M.fromList [(0,4),(3,5),(5,1)]
sumaPol :: (Num a, Eq a) => Polinomio a -> Polinomio a -> Polinomio a
sumaPol p q =
M.filter (/=0) (M.unionWith (+) p q)
multPorTerm :: Num a => (Int,a) -> Polinomio a -> Polinomio a
multPorTerm (n,a) p =
M.map (*a) (M.mapKeys (+n) p)
multPol :: (Eq a, Num a) => Polinomio a -> Polinomio a -> Polinomio a
multPol p q
| M.null p = M.empty
| otherwise = sumaPol (multPorTerm t q) (multPol r q)
where (t,r) = M.deleteFindMin p
import Data.Map ( Map
, assocs
, deleteFindMin
, empty
, fromList
, fromListWith
, insertWith
)importqualified Data.Map as M
-- 1ª definición
inverso ::(Ord k, Ord v)=> Map k v -> Map v [k]
inverso d = fromListWith (++)[(y,[x])|(x,y)<- assocs d]-- 2ª definición
inverso2 ::(Ord k, Ord v)=> Map k v -> Map v [k]
inverso2 d
| M.null d = empty
|otherwise= insertWith (++) y [x](inverso2 e)where((x,y),e)= deleteFindMin d
import Data.Map ( Map
, assocs
, deleteFindMin
, empty
, fromList
, fromListWith
, insertWith
)
import qualified Data.Map as M
-- 1ª definición
inverso :: (Ord k, Ord v) => Map k v -> Map v [k]
inverso d = fromListWith (++) [(y,[x]) | (x,y) <- assocs d]
-- 2ª definición
inverso2 :: (Ord k, Ord v) => Map k v -> Map v [k]
inverso2 d
| M.null d = empty
| otherwise = insertWith (++) y [x] (inverso2 e)
where ((x,y),e) = deleteFindMin d
sumaPol :: (Num a, Eq a) => Polinomio a -> Polinomio a -> Polinomio a
multPorTerm :: Num a => (Int,a) -> Polinomio a -> Polinomio a
multPol :: (Eq a, Num a) => Polinomio a -> Polinomio a -> Polinomio a
sumaPol :: (Num a, Eq a) => Polinomio a -> Polinomio a -> Polinomio a
multPorTerm :: Num a => (Int,a) -> Polinomio a -> Polinomio a
multPol :: (Eq a, Num a) => Polinomio a -> Polinomio a -> Polinomio a
tales que
(sumaPol p q) es la suma de los polinomios p y q. Por ejemplo,
importqualified Data.Map as M
type Polinomio a = M.Map Int a
ejPol1, ejPol2 :: Polinomio Int
ejPol1 = M.fromList [(0,3),(1,7),(3,-5)]
ejPol2 = M.fromList [(0,4),(3,5),(5,1)]
sumaPol ::(Num a, Eq a)=> Polinomio a -> Polinomio a -> Polinomio a
sumaPol p q =
M.filter(/=0)(M.unionWith (+) p q)
multPorTerm ::Num a =>(Int,a)-> Polinomio a -> Polinomio a
multPorTerm (n,a) p =
M.map(*a)(M.mapKeys (+n) p)
multPol ::(Eq a, Num a)=> Polinomio a -> Polinomio a -> Polinomio a
multPol p q
| M.null p = M.empty
|otherwise= sumaPol (multPorTerm t q)(multPol r q)where(t,r)= M.deleteFindMin p
import qualified Data.Map as M
type Polinomio a = M.Map Int a
ejPol1, ejPol2 :: Polinomio Int
ejPol1 = M.fromList [(0,3),(1,7),(3,-5)]
ejPol2 = M.fromList [(0,4),(3,5),(5,1)]
sumaPol :: (Num a, Eq a) => Polinomio a -> Polinomio a -> Polinomio a
sumaPol p q =
M.filter (/=0) (M.unionWith (+) p q)
multPorTerm :: Num a => (Int,a) -> Polinomio a -> Polinomio a
multPorTerm (n,a) p =
M.map (*a) (M.mapKeys (+n) p)
multPol :: (Eq a, Num a) => Polinomio a -> Polinomio a -> Polinomio a
multPol p q
| M.null p = M.empty
| otherwise = sumaPol (multPorTerm t q) (multPol r q)
where (t,r) = M.deleteFindMin p
importqualified Data.List as L
import Data.Map
-- 1ª definición (por recursión)
agrupa1 ::Ord c =>(a -> c)->[a]-> Map c [a]
agrupa1 _ []= empty
agrupa1 f (x:xs)= insertWith (++)(f x)[x](agrupa1 f xs)-- 2ª definición (por plegado)
agrupa2 ::Ord c =>(a -> c)->[a]-> Map c [a]
agrupa2 f = L.foldr(\x -> insertWith (++)(f x)[x]) empty
import qualified Data.List as L
import Data.Map
-- 1ª definición (por recursión)
agrupa1 :: Ord c => (a -> c) -> [a] -> Map c [a]
agrupa1 _ [] = empty
agrupa1 f (x:xs) = insertWith (++) (f x) [x] (agrupa1 f xs)
-- 2ª definición (por plegado)
agrupa2 :: Ord c => (a -> c) -> [a] -> Map c [a]
agrupa2 f = L.foldr (\x -> insertWith (++) (f x) [x]) empty
(graficas ns) dibuja las gráficas de (frecuenciasDistancias k) para k en ns. Por ejemplo, (graficas [10,20,30]) dibuja (graficas [1000,2000,3000]) dibuja
y (graficas [100000,200000,300000]) dibuja
(distanciasMasFrecuentes n) es la lista de las distancias más frecuentes entre los elementos consecutivos de la lista de los n primeros primos. Por ejemplo,