这可能是一个奇怪的问题,但如果我想要定义一个整数列表:
1, 2, 3, 4, 5, 6, 7, 8, 9
Run Code Online (Sandbox Code Playgroud)
我需要使用;角色吗?
[ 1; 2; 3; 4; 5; 6; 7; 8; 9 ]
Run Code Online (Sandbox Code Playgroud)
代替?:
[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
Run Code Online (Sandbox Code Playgroud)
在我看来,,它更自然,更容易在眼睛上.只是想知道背后使用的想法;?(不批评)
Jar*_*Par 16
是的,你必须.原因是在F#中逗号运算符用于元组表达式.因此表达式1,2,...9被解释为具有9个值的单个元组.
[1,2] // List with 1 element that is a tuple value - (int*int) list
[1;2] // List with 2 elements that are integer values - int list
Run Code Online (Sandbox Code Playgroud)
Bri*_*ian 15
其他答案都指出了主要原因.
另外值得注意的是,与大多数其他地方使用分号的语言一样,另一种选择是换行.例如
[ "foo"; "bar"; "baz" ]
Run Code Online (Sandbox Code Playgroud)
也可以写成
[ "foo"
"bar"
"baz" ]
Run Code Online (Sandbox Code Playgroud)
或者用换行符替换分号的各种其他布局.
[1,2,3,4,5] 是int*int*int*int*int类型的1个元素的列表
[1;2;3;4;5] 是一个int类型的5个元素的列表
此外,列表理解和范围是你的朋友
let bar = [1..9],1..9是一个范围,所以它被展开为1; 2; 3; ... 9;
let blort = [for i in 1..9 -> i] 理解是做同样的事情 - 对于某些性能问题更有力量.
编辑:为了完整起见,你也可以这样做
let foo = [1
2
3]
Run Code Online (Sandbox Code Playgroud)
并获得[1; 2; 3]的列表
只是想知道使用 ; 背后的想法
元组在机器学习中更常见,使用它;可以让您将元组列表编写为:
[1, 2; 3, 4]
Run Code Online (Sandbox Code Playgroud)
从历史上看,F# 从 OCaml 继承了这种语法,OCaml 通过尝试从标准 ML 语法中删除更多多余的括号来创建其语法。