F#Fractal - 一个我无法弄清楚的错误

我试图在网络上找到一个例子。这是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'。预期' - >'或其他令牌。 我无法弄清楚这有什么问题。为了更好地理解代码,我搜索了langauge规范。据我所知,
Set.mem
函数或
->>
算子没什么。你知道什么是错的吗?     
已邀请:
尝试
[for (side, trigs) in cube do
    if Set.contains side incl_sides then
        yield! trigs]
自编写代码以来,该语言经历了很多变化。特别是,
->>
算子已被
yield!
取代,
Set.mem
已被重命名为更具描述性的
Set.contains
,而现在使用comp9ѭ而不是
when
。     
是的,从博客文章链接的源代码版本有点旧。您可以在CodePlex上的F#示例项目中找到最新(更新)版本。我认为可能还有其他一些变化,因此最好从CodePlex获取版本。 (它包括
FractalSimple.fs
,这是更简单的版本和
Fractal.fs
,它也删除了不可见的立方体边)。 该项目包含标准的Visual Studio2008/2010
.fsproj
项目。博客上的原始版本是使用F#CTP(来自VS 2005时)编写的,它具有完全不同的Visual Studio集成并使用了过时的
.fsharpp
项目格式(在MSBUILD格式存在之前)。
when
->>
构造已被用作编写查询的轻量级语法,但现在已弃用,以使语法内部的语法与语言的其余部分保持一致。正如kvb指出的那样,你可以使用普通的
if .. then
,唯一不标准的东西是
yield!
,这意味着返回给定序列的所有元素。     

要回复问题请先登录注册