在序列计算表达式中产生for循环

Pan*_*nos 11 f# sequence

为什么这些工作

let x = seq { for i in 1 .. 10 do yield i }
let x = seq { for i in 1 .. 10 -> i }
let x = seq { for i = 1 to 10 do yield i }
Run Code Online (Sandbox Code Playgroud)

但这一个不?

let x = seq { for i = 1 to 10 -> i }
Run Code Online (Sandbox Code Playgroud)

Tom*_*cek 12

根据F#规范,序列表达式可以是正常计算表达式(这是您编写的情况do yield),也可以是特定于序列表达式的简短形式:

seq { comp-expr }
seq { short-comp-expr }
Run Code Online (Sandbox Code Playgroud)

comp-expr案件涉及您的第一个和最后的工作的例子.简短形式使用->和规范明确说明唯一允许的简短形式是in关键字:

short-comp-expr :=
   for pat in expr-or-range-expr -> expr        -- yield result
Run Code Online (Sandbox Code Playgroud)

还有许多其他简短形式在实践中很有用,但我想目标是为这一个提供一种特殊的语法,非常频繁,并保持语言统一.

  • 规范的链接不再有效,任何人都可以查看[最新规范](http://fsharp.org/specs/language-spec/),第6.3.11节"序列表达式". (2认同)