这可能是一个奇怪的问题,但如果我想要定义一个整数列表:
1, 2, 3, 4, 5, 6, 7, 8, 9
我是否需要使用;
字符进行操作?
[ 1; 2; 3; 4; 5; 6; 7; 8; 9 ]
而不是?:
[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
在我看来,,
对于眼睛来说更自然,更容易。只是想知道使用;
背后的想法? (不批评)
答案 0 :(得分: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
答案 1 :(得分:14)
其他答案指出了主要原因。
另外值得注意的是,与大多数其他地方使用分号的语言一样,另一种选择是新行。例如
[ "foo"; "bar"; "baz" ]
也可以写成
[ "foo"
"bar"
"baz" ]
或用换行符替换分号的各种其他布局。
答案 2 :(得分:7)
[1,2,3,4,5]
是int * int * int * int * int
[1;2;3;4;5]
是包含int
另外,列表理解和范围是你的朋友
let bar = [1..9]
,1..9是一个范围,所以它被展开为1; 2; 3; ... 9;
let blort = [for i in 1..9 -> i]
是一种能够做同样事情的理解 - 对某些性能问题更有力量。
编辑:为了完整起见,您也可以
let foo = [1
2
3]
并获取[1; 2; 3]
的列表答案 3 :(得分:4)
只是想知道背后的想法;?
元组在ML中更常见,使用;
可以编写元组列表:
[1, 2; 3, 4]
从历史上看,F#从OCaml继承了这种语法,它通过尝试从标准ML语法中删除更多多余的括号来创建其语法。