我想做一个函数,该函数从成对列表中返回每对成对元素的列表。例如:

>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

关于haskell - 如何从对列表中将每个对的两个元素相乘-Haskell,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30335658/

10-10 18:38