为什么将[2..3..10]解释为[2; 5; 8]

Ron*_*nin 2 f# functional-programming

当我声明以下列表时

let list = [2..3..10]
Run Code Online (Sandbox Code Playgroud)

F#interactive将其解释为包含的列表[2; 5; 8].该控制台输出将是:

let list = [2..3..10]
;;

val list : int list = [2; 5; 8]
Run Code Online (Sandbox Code Playgroud)

背后的数学是什么?我没有看到输入如何与输出相关.

Rei*_*ica 10

来自F#语言规范:

涉及expr1 .. expr2的范围表达式被转换为(..)运算符的使用,而涉及expr1 .. expr1 .. expr3的范围表达式被转换为(... ..)运算符的使用.(.. ..)运算符使用expr2的增量为start(expr1)和finish(expr3)值之间的值范围生成IEnumerable <_>.

要不就:

[start .. step .. stop]