2015-10-20 67 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

相關問題