Какова причина использования;в списках F # вместо,? - PullRequest
13 голосов
/ 20 сентября 2010

Это может быть странный вопрос, но если я хочу определить список целых чисел:1007 * вместо?:

[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

Мне просто кажется , более естественным и легким для глаз.Просто интересует идея использования ;?(Не критикуя)

Ответы [ 4 ]

16 голосов
/ 20 сентября 2010

Да, вы должны. Причина в том, что в 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
14 голосов
/ 20 сентября 2010

В других ответах указана основная причина.

В дополнение стоит отметить, что, как и в большинстве других мест, где точка с запятой используется в языке, альтернативой является перевод строки.Например,

[ "foo"; "bar"; "baz" ]

также можно записать как

[ "foo"
  "bar"
  "baz" ]

или множество других форматов, в которых точки с запятой заменяются на новые строки.

7 голосов
/ 20 сентября 2010

[1,2,3,4,5] это список из 1 элемента типа int * int * int * int * int

[1;2;3;4;5] также список из 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]

4 голосов
/ 04 января 2012

Просто интересует идея использования;?

Кортежи более распространены в ML, и использование ; позволяет писать списки кортежей как:

[1, 2; 3, 4]

Исторически F # унаследовал этот синтаксис от OCaml, который создал свой синтаксис, пытаясь удалить излишние скобки из синтаксиса Standard ML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...