我想做一个函数,该函数从成对列表中返回每对成对元素的列表。例如:
>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/