2017-10-12 51 views
2

我的函数vector1接受一个类型为(Double,Double,Double)的元组,并且它应该将元组中的所有元素乘以-1,并返回一个带有负双精度元组的列表。代码编译,但无限循环。在元组列表中的列表理解haskell

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

带元组的列表?你能展示一个你想要的输出的例子吗? – Ryan

+0

input(1,2,3)→output [( - 1,-2,-3)] – bubu

+2

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

回答

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 
+0

这真的很有帮助,谢谢! – bubu