列表中的元组列表,haskell

时间:2017-10-12 01:42:11

标签: haskell tuples list-comprehension

我的函数vector1取一个类型的元组(Double,Double,Double),它应该将元组中的所有项乘以-1,并返回一个带有负双元组的列表。代码编译,但无限循环。

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

1 个答案:

答案 0 :(得分:5)

您似乎试图在y上进行列表理解,而不是y'

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

但这也不起作用,因为列表推导是针对列表的。不同大小的元组完全是不同的类型。由于您已经解压缩(p, q, r),因此您可以手动将-应用于每个人(然后将其包装在列表中,无论出于何种原因):

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

如果您想为三元组定义map

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