F# 分形——一个我能理解的错误';不明白

F# 分形——一个我能理解的错误';不明白,f#,functional-programming,fractals,F#,Functional Programming,Fractals,我想在网上找到一个例子。这是F#中的三维分形。这是:。源代码可在本文末尾下载。这篇文章和示例是在2007年编写的,所以我认为代码有点过时。有一个代码块会导致错误,代码无法编译: // Returns a cube with filtered sides let private get_cube(incl_sides) = [ for (side,trigs) in cube when Set.mem side incl_sides ->> tr

我想在网上找到一个例子。这是F#中的三维分形。这是:。源代码可在本文末尾下载。这篇文章和示例是在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”。应为'->'或其他标记

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

试试看

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

自代码编写以来,该语言经历了很多变化。特别是,
->
运算符已被
yield>替换
Set.mem
已被重命名为更具描述性的
Set.contains
,如果。。。然后而不是
是时,从博客帖子链接的源代码版本有点旧。您可以在on CodePlex中找到最新(更新)版本。我认为可能还有其他一些变化,所以最好从CodePlex获得该版本。(它包括较简单版本的
FractalSimple.fs
Fractal.fs
,后者还删除了不可见的立方体侧面)

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


when
->
构造已被用作编写查询的轻量级语法,但现在已被弃用,以使理解中的语法与语言的其余部分保持一致。正如kvb所指出的,如果。。那么唯一的非标准就是
收益率
,这意味着返回给定序列的所有元素。

哇,你是程序的作者。非常感谢你。我昨天给你发了一封邮件,上面有这个问题,我猜你没有收到。或者可能有语言障碍的问题,我用斯洛伐克语写的:-)这可能是我的臆断,但实际上我急需帮助。我能不能直接和你联系,讨论一下这个问题?好的,我发现新版本有更多的bug。缺少的第一件事是模块名。然后是“立方体”的重复定义。更严重的是:Array.to_list、Set.of_seq和list.fold_left2没有定义。@moebius:你说得对-即使是CodePlex版本也不是最新的。我对它进行了修改,并添加了VS2010项目,该项目应该与最新的F#配合使用。(这些函数被稍微重命名,例如,to_list变成了
toList
)@moebius:我收到了你的电子邮件,我甚至没有注意到它是用斯洛伐克语写的:-)。我能很好地读斯洛伐克语。我只是回复邮件很慢。。。如果您需要更多帮助,请随时向我发送电子邮件(我相信我已经回答了这里的所有问题),或者向Stackoverflow询问(在那里有更多的人可以提供帮助,通常帮助速度非常快:-)。嗨,我已经向您发送了另一封电子邮件。我现在知道你对他们的回复很慢,我不想给你压力或做任何事情。我真的很想知道你对我在电子邮件中写的东西有什么看法。