SharpDevelop下的F#

Dar*_*ght 2 f# list fold

好吧,这是相当令人沮丧的,我已经安装了最新版本的SharpDevelop,并且还安装了F#编译器(根据SharpDevelops网站的链接)

我在Vista中运行.

到目前为止,一切都运转良好.

但由于某些原因,当我尝试使用List.fold_left时,它只是拒绝编译,但List.fold似乎工作,

这是错误:

未定义值,构造函数,命名空间或类型"fold_left"(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()
Run Code Online (Sandbox Code Playgroud)

进一步的问题是我正在尝试使用折叠来对列表中的每个项目进行平方,例如:

1^2 + 2^2 + 3^2 ...
Run Code Online (Sandbox Code Playgroud)

我假设Fold采用了一个函数和一个列表,所以我尝试了如下:

let sq x = x*x
let ans = List.fold (sq) 0 nums
Run Code Online (Sandbox Code Playgroud)

但这在第二行给出了以下错误:

类型'int - > int'与类型'int'不匹配(FS0001) - 类型'' - > int'与类型'int'不匹配(FS0001) -

请有人解释一下吗?

kvb*_*kvb 9

List.fold_left是函数的旧名称,现在是List.fold.你遇到的问题是List.fold需要两个参数,第一个是折叠列表的函数,第二个参数是递归的初始种子.您使用的函数需要使用两个参数,即到目前为止的运行总计和列表的下一个元素.你想用类似的东西

List.fold (fun sum x -> sum + x * x) 0 [1..10]
Run Code Online (Sandbox Code Playgroud)

你得到的错误只是告诉你,你试图使用的函数类型没有采用正确数量的参数.

  • 你可以通过查看我在答案中链接的文档找到它.图书馆文档是一个不错的参考 - 看看! (3认同)