2010-07-01 67 views
2

下好了,這是相當令人沮喪,我,已經安裝了最新版本的SharpDevelop的,並且還安裝了F#編譯器(按從SharpDevelops網站的鏈接)F#的SharpDevelop

我在Vista上運行。

到目前爲止,一切都工作正常。

但由於某些原因,它只是拒絕編譯時,我嘗試使用List.fold_left,但是List.fold似乎工作,

這裏是錯誤:

The value, constructor, namespace or type 'fold_left' is not defined (FS0039)

這裏是代碼:

#light 
open System 
let nums = [1..10] 
let ans = List.fold_left (+) 0 nums 
Console.WriteLine("answer: {0}", ans) 
// Just to make it pause 
let pause = Console.ReadLine() 

進一步的問題是,我試圖用摺疊列表如方的每個項目:

1^2 + 2^2 + 3^2 ... 

我假定折取一個函數和一個列表,所以我已經試過如下:

let sq x = x*x 
let ans = List.fold (sq) 0 nums 

,但是這給了我下面的錯誤都在第二行:

The type 'int -> int' does not match the type 'int' (FS0001) - The type ''a -> int' does not match the type 'int' (FS0001) -

請有人可以解釋這一點?

回答

9

List.fold_left是功能的舊名稱,現在是List.fold。你有的問題是List.fold有兩個參數,第一個參數是摺疊列表的函數,第二個參數是遞歸的初始種子。您使用的函數需要參數兩個參數,到目前爲止的運行總數和列表的下一個元素。你想使用類似

List.fold (fun sum x -> sum + x * x) 0 [1..10] 

你得到只是告訴你,你試圖使用功能的類型沒有采取的觀點的權利號碼錯誤。

+0

因此,這引起了我前幾天想知道的事情。標準庫中是否有正確的摺疊? – 2010-07-01 03:05:10

+1

@Nels - 是的,它被稱爲'List.foldBack'。 – kvb 2010-07-01 03:21:30

+3

你可以通過查看我在我的答案中鏈接的文檔來找到它。圖書館文件是一個體面的參考 - 看看! – Brian 2010-07-01 04:43:16

4

順便說,圖書館的參考文檔是在這裏:

http://msdn.microsoft.com/en-us/library/ee353567.aspx

見例如

http://msdn.microsoft.com/en-us/library/ee353738.aspx

(我忘了是多麼困難而不智能感知發展。)

另外,還可以在上面取出「#light」,這是沒有必要的。

+0

非常感謝這些鏈接,以及不需要#light的提示。如果沒有Intellisense,這很困難,有一半的時間我不知道我的語法是否正確。 – Darknight 2010-07-01 13:01:01

+0

討厭陳述明顯,但考慮使用Visual Studio來代替。你在那裏得到一些基本的智能感知 – 2011-03-13 11:35:58