我想做一个函数,该函数从成对列表中返回每对成对元素的列表。例如:
>product [1,2] [3,4]
[3,8]
我想使用list comprehension
。我尝试过这样的事情:
product :: Num a => [a] -> [a] -> [a]
product xs ys = [x*y | z<-zip xs ys, (x, _)<-z, (_, y)<-z]
但它不起作用。应该改变什么?
根据经验,<-
每个嵌套迭代都应该有一个。由于您只想遍历一个列表-即zip xs ys
-只能有一个<-
。因此:
scalarproduct xs ys = sum [x*y | (x,y) <- zip xs ys]
您可能还喜欢该zipWith
函数:
scalarproduct xs ys = sum (zipWith (*) xs ys)
scalarproduct = (sum .) . zipWith (*) -- may be readable, depending on your bent
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句