如何将每对中的两个元素从对列表中相乘 - Haskell

brz*_*ski 1 haskell list-comprehension

我想制作从对列表中返回每对中的乘法元素列表的函数.例如:

>product [1,2] [3,4]
[3,8]
Run Code Online (Sandbox Code Playgroud)

我想用这个来做list comprehension.我试过这样的事情:

product :: Num a => [a] -> [a] -> [a]
product xs ys = [x*y | z<-zip xs ys, (x, _)<-z, (_, y)<-z]
Run Code Online (Sandbox Code Playgroud)

但它不起作用.应该改变什么?

Dan*_*ner 7

根据经验,<-每个嵌套迭代都应该有一个.因为你只想迭代一个列表 - 即,zip xs ys- 应该只有一个<-.从而:

scalarproduct xs ys = sum [x*y | (x,y) <- zip xs ys]
Run Code Online (Sandbox Code Playgroud)

您可能也喜欢这个zipWith功能:

scalarproduct xs ys = sum (zipWith (*) xs ys)
scalarproduct = (sum .) . zipWith (*) -- may be readable, depending on your bent
Run Code Online (Sandbox Code Playgroud)