2

好的,这很令人沮丧,我已经安装了最新版本的 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 ...

我假设 Fold 需要一个函数和一个列表,所以我尝试如下:

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

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

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

请问有人可以解释一下吗?

4

2 回答 2

9

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

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

您得到的错误只是告诉您您尝试使用的函数类型没有采用正确数量的参数。

于 2010-07-01T01:26:32.250 回答
4

顺便说一句,图书馆参考文档在这里:

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

参见例如

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

(我已经忘记了没有 Intellisense 的开发有多困难。)

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

于 2010-07-01T01:45:13.230 回答