2
我的函数vector1接受一个类型为(Double,Double,Double)的元组,并且它应该将元组中的所有元素乘以-1,并返回一个带有负双精度元组的列表。代码编译,但无限循环。在元组列表中的列表理解haskell
vector1 (p,q,r)= let
y=(p,q,r)
y'=[(-1)*y | (y)<-y']
in y'
我的函数vector1接受一个类型为(Double,Double,Double)的元组,并且它应该将元组中的所有元素乘以-1,并返回一个带有负双精度元组的列表。代码编译,但无限循环。在元组列表中的列表理解haskell
vector1 (p,q,r)= let
y=(p,q,r)
y'=[(-1)*y | (y)<-y']
in y'
它看起来像你试图做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
这真的很有帮助,谢谢! – bubu
带元组的列表?你能展示一个你想要的输出的例子吗? – Ryan
input(1,2,3)→output [( - 1,-2,-3)] – bubu
所以'vector1(p,q,r)= [(-p,-q,-r)]? – Ryan