【问题标题】:F# Fractal - a bug I can't figure outF# Fractal - 我无法弄清楚的错误
【发布时间】:2011-04-04 13:25:44
【问题描述】:

我正在尝试制作我在网络上找到的示例。这是 F# 中的 3D 分形。这是:http://tomasp.net/blog/infinite-cheese.aspx。源代码可在文末下载。文章和示例写于 2007 年,所以我认为代码稍微过时了。有一段代码导致错误,代码无法编译:

// Returns a cube with filtered sides
let private get_cube(incl_sides) =
    [ for (side,trigs) in cube
        when Set.mem side incl_sides
        ->> trigs ]

when关键字有下划线,错误信息如下:

表达式中出现意外的关键字“when”。应为“->”或其他标记。

我不知道这有什么问题。为了更好地理解代码,我搜索了语言规范。据我所知,Set.mem 函数或->> 运算符没有任何内容。您知道可能出了什么问题吗?

【问题讨论】:

    标签: f# functional-programming fractals


    【解决方案1】:

    试试

    [for (side, trigs) in cube do
        if Set.contains side incl_sides then
            yield! trigs]
    

    自编写代码以来,该语言已经发生了很多变化。特别是,->> 运算符已被 yield! 取代,Set.mem 已重命名为更具描述性的 Set.contains,并且推导式现在使用 if ... then 而不是 when。

    【讨论】:

      【解决方案2】:

      是的,从博文链接的源代码版本有点旧。您可以在 CodePlex 上的 F# samples project 中找到最新(更新)版本。我认为可能还有其他一些变化,所以最好从 CodePlex 获取版本。 (它包括FractalSimple.fs 这是更简单的版本和Fractal.fs 这也删除了不可见的立方体边)。

      该项目包含标准 Visual Studio 2008/2010 .fsproj 项目。博客上的原始版本是使用 F# CTP(从 VS 2005 时代开始)编写的,它具有完全不同的 Visual Studio 集成并使用过时的 .fsharpp 项目格式(在 MSBUILD 格式存在之前)。

      when 和 ->> 构造已被用作编写查询的轻量级语法,但现在已被弃用,以使解析内的语法与语言的其余部分保持一致。正如 kvb 指出的那样,您可以使用普通的if .. then,唯一不标准的是yield!,这意味着返回给定序列的所有元素。

      【讨论】:

      • 哇,你是这个程序的作者。太感谢了。我昨天给你发了一封电子邮件,里面有这个问题,你猜你没收到。或者可能存在语言障碍问题,我用斯洛伐克语写的 :-) 这可能是我的冒昧,但我实际上急需帮助。我是否可以以某种方式直接与您联系并讨论这个问题?
      • 好吧,我实际上在新版本中遇到了更多错误。缺少的第一件事是模块名称。然后是“立方体”的重复定义。而更严重的:Array.to_list、Set.of_seq 和 List.fold_left2 没有定义。
      • @moebius:你是对的——即使是 CodePlex 版本也不是最新的。我修复了它并添加了应该与最新 F# 一起使用的 VS 2010 项目。 (函数稍微重命名,例如 to_list 变为 toList)。
      • @moebius:我收到了你的电子邮件——我什至没有注意到它是在斯洛伐克语的:-)。我可以很好地阅读斯洛伐克语。我只是回复电子邮件的速度很慢...如果您需要更多帮助,请随时给我发送电子邮件(我相信我在这里回答了所有问题),或者在 Stackoverflow 上提问(那里有更多人可以提供帮助并且通常会很快提供帮助: -))。
      • 您好,我已经给您发送了另一封电子邮件。我现在知道你回复他们的速度很慢,我不想给你压力或任何事情。我真的很想知道您对我在电子邮件中写的内容有何看法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 2012-08-23
      相关资源
      最近更新 更多