题
好的,这很令人沮丧,我安装了最新版本的Sharp Developt,并安装了F#编译器(根据Sharp Develops网站的链接)
我在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) -
请有人解释一下吗?
解决方案
List.fold_left
是该功能的旧名称,现在 List.fold
. 。您的问题是 List.fold
采用两个参数,第一个参数是折叠在列表上的函数,第二个是递归的初始种子。您使用的功能需要采用 二 参数,到目前为止的运行总数以及列表的下一个元素。您想使用类似的东西
List.fold (fun sum x -> sum + x * x) 0 [1..10]
您遇到的错误只是告诉您您要使用的功能的类型并没有采用正确的参数。
其他提示
顺便说一句,库参考文档在这里:
http://msdn.microsoft.com/en-us/library/ee353567.aspx
参见例如
http://msdn.microsoft.com/en-us/library/ee353738.aspx
(我忘记了如果没有智能意识,就很难开发。)
另外,您可以删除顶部的“ #Light”,不需要。
不隶属于 StackOverflow