Definir la función

` conSuma :: (Eq a, Num a) => [a] -> [[a]] -> [[[a]]]`

tal que (conSuma xs yss) es la lista de los vectores de xss cuya suma vectorial es xs. Por ejemplo,

``` ghci> conSuma [9,10,12] [[4,7,3],[3,1,4],[5,3,9],[2,2,5]] [[[4,7,3],[5,3,9]],[[4,7,3],[3,1,4],[2,2,5]]] ghci> conSuma [9,11,12] [[4,7,3],[3,1,4],[5,3,9],[2,2,5]] []```

#### Soluciones

```import Data.List (subsequences, transpose)   conSuma :: (Eq a, Num a) => [a] -> [[a]] -> [[[a]]] conSuma xs yss = [zss | zss <- subsequences yss, suma zss == xs]   -- (suma xss) es la suma de las listas xs. Por ejemplo, -- suma [[4,7,3],[3,1,4],[2,2,5]] == [9,10,12] suma :: Num a => [[a]] -> [a] suma = map sum . transpose```
Medio

## Una solución de “Listas con suma dada”

1. Eduardo Román
```import Data.List (subsequences)   conSuma :: (Eq a, Num a) => [a] -> [[a]] -> [[[a]]] conSuma xs yss = [ys | ys <- subsequences yss, sumaVec ys == xs]   sumaVec :: Num a => [[a]] -> [a] sumaVec xss | map length xss == replicate (length xss) 1 = [sum (map head xss)] sumaVec xss = sum (map head xss) : sumaVec (map tail xss)   -- sumaVec es la misma que en el anterior ejercicio```

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.