代码之家  ›  专栏  ›  技术社区  ›  Darknight

F在SharpDevelopment下

  •  2
  • Darknight  · 技术社区  · 16 年前

    好吧,这很令人沮丧,我已经安装了最新版本的SharpDevelopment,还安装了F编译器(根据SharpDevelopment网站的链接)

    我在维斯塔跑步。

    到目前为止,一切都很顺利。

    但由于某种原因,当我尝试使用list.fold_left时,它只是拒绝编译,然而list.fold似乎有效,

    错误如下:

    未定义值、构造函数、命名空间或类型“fold\u 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)不匹配-

    有人能解释一下吗?

    2 回复  |  直到 12 年前
        1
  •  9
  •   kvb    16 年前

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

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

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

        2
  •  4
  •   Brian    16 年前

    顺便说一下,图书馆参考文件在这里:

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

    参见

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

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

    另外,您可以移除顶部的“灯”,这是不需要的。

    推荐文章