2017-10-12 3 views
2

Ma fonction vector1 prend un tuple du type (Double, Double, Double) et il faut multiplier tous les items du tuple par -1 et retourner une liste avec un tuple de doubles négatifs. Le code compile, mais boucle infiniment.Compréhension de la liste sur la liste des tuples, haskell

vector1 (p,q,r)= let 
    y=(p,q,r) 
    y'=[(-1)*y | (y)<-y'] 
    in y' 
+0

Une liste avec un tuple? Pouvez-vous montrer un exemple de la sortie que vous souhaitez? – Ryan

+0

entrée (1,2,3) -> sortie [(- 1, -2, -3)] – bubu

+2

donc 'vector1 (p, q, r) = [(-p, -q, -r)]'? – Ryan

Répondre

5

On dirait que vous essayez de faire une compréhension de liste y, non y':

vector1 (p,q,r)= let 
    y=(p,q,r) 
    y'=[(-1)*x | x<-y] 
    in y'

mais qui ne fonctionne pas non plus, parce que la liste des compréhensions des listes. Les tuples de différentes tailles sont entièrement différents. Puisque vous déballer déjà (p, q, r), vous pouvez appliquer - à chacun d'eux manuellement (puis l'envelopper dans une liste selon la raison):

vector1 (p, q, r) = [(-p, -q, -r)] 

Si vous vous sentez comme la définition d'une map pour triplets:

map3 :: (a -> b) -> (a, a, a) -> (b, b, b) 
map3 f (p, q, r) = (f p, f q, f r) 

vector1 :: Num a => (a, a, a) -> [(a, a, a)] 
vector1 = pure . map3 negate 
+0

Cela a été très utile, merci! – bubu