List F#在SharpDevelop下
好吧,这是相当令人沮丧的,我;我们安装了最新版本的SharpDevelop,还安装了F#编译器(根据SharpDevelops网站的链接) 我在Vista中跑步 到目前为止,一切进展顺利 但由于某种原因,当我尝试使用List.fold_left时,它只是拒绝编译,然而List.fold似乎可以工作 以下是错误: 未定义值、构造函数、命名空间或类型“fold_left”(FS0039) 代码如下: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
#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代替。你会有一些基本的智能感知