Лучший способ добавить элемент в начале последовательности F # - PullRequest
9 голосов
/ 19 марта 2012

F # List предоставляет оператор cons (::) для добавления элемента в начало списка.Есть ли функция, чтобы сделать то же самое для Seq?Единственный способ, с которым я столкнулся, - это использовать Seq.append следующим образом.Есть ли более эффективный / элегантный способ сделать это?

> let myLst = [1..5]
> 0::myLst;;
val it : int list = [0; 1; 2; 3; 4; 5]


> let mySeq = {1..5}
> Seq.append (seq [0]) mySeq;;
val it : seq<int> = seq [0; 1; 2; 3; ...]

Возможно дублирование, но не отвечая на мой вопрос.

[1] использует Seq.appendкак указано выше

1 Ответ

8 голосов
/ 19 марта 2012

Может помочь вспомнить, что последовательность F # действительно является вычислением.Независимо от того, как вы собираетесь достичь этого, в конце дня у вас должен быть новый расчет, который, при перечислении, сначала дает добавленный элемент, а затем возвращает старую последовательность.В наиболее прямой форме это может быть достигнуто с помощью выражения последовательности :

> let mySeq = {1..5}
> seq { yield 0; yield! mySeq };;
val it : seq<int> = seq [0; 1; 2; 3; ...]

Seq.append. Библиотечная функция - это просто оптимизированная реализация семантически одного и того же действия.

...