let Привет |>
Начал на досуге глядеть в F# туториалы, и само собой полезли нубские вопросы. Скажем, работа с коллекциями:
// ------ Lists ------
let twoToFive = [2; 3; 4; 5] // Square brackets create a list with
// semicolon delimiters.
let oneToFive = 1 :: twoToFive // :: creates list with new 1st element
// The result is [1; 2; 3; 4; 5]
let zeroToFive = [0; 1] @ twoToFive // @ concats two lists
Внутренний перфекционист спрашивает: а зачем два оператора, :: и @, если можно было бы оставить и один из них?
@-оператор требует всегда превращать одиночный элемент в коллекцию из одного элемента, наподобие [1] @ twoToFive
cons-оператор (два двоеточия) ещё и запрещает переставлять аргументы местами (слева всегда должен быть одиночный элемент, а справа — коллекция).
Собственно, вопрос: в каких ситуациях может возникнуть та самая двусмысленность, из-за которой и пришлось ввести два разных оператора? Или это просто "исторически сложилось"?