List F#在SharpDevelop下

List F#在SharpDevelop下,list,f#,fold,List,F#,Fold,好吧,这是相当令人沮丧的,我;我们安装了最新版本的SharpDevelop,还安装了F#编译器(根据SharpDevelops网站的链接) 我在Vista中跑步 到目前为止,一切进展顺利 但由于某种原因,当我尝试使用List.fold_left时,它只是拒绝编译,然而List.fold似乎可以工作 以下是错误: 未定义值、构造函数、命名空间或类型“fold_left”(FS0039) 代码如下: #light open System let nums = [1..10] let ans = Li

好吧,这是相当令人沮丧的,我;我们安装了最新版本的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()
进一步的问题是,我正在尝试使用折叠来对列表中的每个项目进行平方处理,例如:

1^2 + 2^2 + 3^2 ...
我假设折叠需要一个函数和一个列表,所以我尝试了以下方法:

let sq x = x*x
let ans = List.fold (sq) 0 nums
但这在第二行给了我以下错误:

类型“int->int”与类型“int”(FS0001)不匹配- 类型“a->int”与类型“int”(FS0001)不匹配-


有人能解释一下吗?

列表。fold\u left
是函数的旧名称,现在是
列表。fold
。您遇到的问题是,
List.fold
接受两个参数,第一个参数是折叠列表的函数,第二个参数是递归的初始种子。您使用的函数需要获取两个参数,即到目前为止的运行总数和列表中的下一个元素。你想用像这样的东西吗

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

您遇到的错误只是告诉您,您尝试使用的函数类型的参数数量不正确。

顺便说一句,库参考文档如下:

见例

(我已经忘记了没有智能感知发展是多么困难。)


另外,您可以删除顶部的“#light”,它是不需要的。

因此,这引出了我前几天一直在想的一件事。标准库中有右折叠吗?@Nels-是的,它叫做
List.foldBack
。你可以通过查看我在回答中链接的文档找到它。图书馆的文档是一个不错的参考资料-看一看!非常感谢您的链接,以及关于不需要灯光的提示。这很难,没有智能,一半的时间我不知道我是否有语法正确。讨厌陈述明显的,但考虑使用VisualStudio代替。你会有一些基本的智能感知