列表中的元组列表,haskell

bub*_*ubu 2 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'
Run Code Online (Sandbox Code Playgroud)

Ry-*_*Ry- 5

看起来你试图做一个列表理解y,而不是y':

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

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

vector1 (p, q, r) = [(-p, -q, -r)]
Run Code Online (Sandbox Code Playgroud)

如果你想定义一个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
Run Code Online (Sandbox Code Playgroud)