2015-10-20 41 views
2

,所以我试图用另一个列表的第n个元素乘以一个列表的第n个元素,并把它们相加如何繁殖在F#列表的两个二第n个元素

let listMulti xList yList = 
|> [for x in xList do 
     for y in yList do 
      yield x*y ] // multiplies all the elements on x with y 
|> List.filter(fun x-> List.nth % List.length (xList) =1) //gets the elements 1 , 4, 7 for a list of size 3. This is scalable 
|> List.sum //add them all up 

所以这里的想法是

>listMulti [1;2;3][4;5;6];; 
val it : int = 32 

所以1×4 + 2 * 5 + 3 * 6 = 32 ,而是即时得到

错误FS0010:意外缀运算符在结合

帮助?

回答

3

错误是因为您以奇怪的方式使用List.nth

我会做类似

List.zip xlist ylist 
|> List.sumBy (fun (a,b) -> a*b) 

这里list.zip结合列表 - 所以,如果你有[1;2;3][4;5;6][(1,4);(2,5);(3,6)]。然后你只需一次乘以一笔。

+0

我不能得到这个工作。我是F#的新手,无法在List.zip2上找到任何信息。我发现List.zip并试图让我的咖喱功能解决它,但我似乎并不理解它。你能更清楚地了解这个的实现吗? – SuperCell

+0

这是一个错误,我在没有编译器的情况下编写 - 应该是zip。增加了一些解释 –

+1

谢谢最后一个问题。我越来越 “期待型支持运营商‘+’,但给定函数类型,你可能会丢失一个参数传递给函数:” 让内部的Xlist yList = List.zip的Xlist yList |>列表.sum(fun(a,b) - > a * b) 这是为什么?不是List.zip xList yList将列表返回到管道中? – SuperCell

相关问题