English 中文(简体)
F# under SharpDevelop
原标题:
  • 时间:2010-07-01 01:19:13
  •  标签:
  • list
  • f#
  • fold

Ok this is rather frustrating, I;ve installed the latest version of SharpDevelop, and also installed the F# compiler (as per the link from SharpDevelops website)

I am running in Vista.

thus far, everything has been working fine.

But for some reason it simply refuses to compile when I try to use List.fold_left, however List.fold seems to work,

here is the error:

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

here is the code:

#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()

the further issues is I m trying to use the fold to square each item in the list eg:

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

I assumed that the Fold takes a function and a list, so I ve tried as follows:

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

but this gives me the following error both on the second line:

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

Please can someone explain this?

最佳回答

List.fold_left was the old name for the function, which is now List.fold. The problem that you have is that List.fold takes two arguments, the first of which is the function to fold over the list and the second of which is the initial seed for the recursion. The function you use needs to take two arguments, the running total so far and the next element of the list. You want to use something like

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

The error you got was just telling you that the type of the function you were trying to use didn t take the right number of arguments.

问题回答

By the way, the library reference docs are here:

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

See e.g.

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

(I ve forgotten how difficult it can be to develop without Intellisense.)

Also, you can remove the "#light" at the top, it is not needed.





相关问题
Finding a class within list

I have a class (Node) which has a property of SubNodes which is a List of the Node class I have a list of Nodes (of which each Node may or may not have a list of SubNodes within itself) I need to be ...

How to flatten a List of different types in Scala?

I have 4 elements:List[List[Object]] (Objects are different in each element) that I want to zip so that I can have a List[List[obj1],List[obj2],List[obj3],List[obj4]] I tried to zip them and I ...

How to remove unique, then duplicate dictionaries in a list?

Given the following list that contains some duplicate and some unique dictionaries, what is the best method to remove unique dictionaries first, then reduce the duplicate dictionaries to single ...

Is List<> better than DataSet for UI Layer in ASP.Net?

I want to get data from my data access layer into my business layer, then prepare it for use in my UI. So i wonder: is it better to read my data by DataReader and use it to fill a List<BLClasses&...

What is the benefit to using List<T> over IEnumerable<T>?

or the other way around? I use generic lists all the time. But I hear occasionally about IEnumerables, too, and I honestly have no clue (today) what they are for and why I should use them. So, at ...

灵活性:在滚动之前显示错误的清单

我有一份清单,在你滚动之前没有显示任何物品,然后这些物品就显示。 是否有任何人知道如何解决这一问题? 我尝试了叫人名单。

Converting Dictionary to List? [duplicate]

I m trying to convert a Python dictionary into a Python list, in order to perform some calculations. #My dictionary dict = {} dict[ Capital ]="London" dict[ Food ]="Fish&Chips" dict[ 2012 ]="...

热门标签