2017-10-12 76 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