2012-03-19 10 views
8

F # List proporciona el operador cons (::) para agregar un elemento al principio de una lista. ¿Hay una función para hacer lo mismo para el Seq? La única forma en que me encontré es usando Seq.append de la siguiente manera. ¿Hay una manera más eficiente/elegante de hacer esto?Mejor manera de agregar elemento al comienzo de la secuencia F #

> 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; ...] 

Posible duplicación, pero realmente no estoy respondiendo a mi pregunta.

[1] utiliza Seq.append que el anterior

+3

Tenga en cuenta que solo puede usar 'Seq.append [0] mySeq', no tiene que ajustar' [0] 'en una llamada a' seq'. – kvb

Respuesta

8

Puede ser útil recordar que F # secuencia es un cálculo, por cierto. No importa cómo va a lograrlo, al final del día debe tener un nuevo cálculo que, si se enumera, primero arroja el elemento adjunto, y luego cede la secuencia anterior. En la mayor parte de forma directa esto se puede lograr usando a sequence expression:

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

Seq.append función de biblioteca es sólo una implementación optimizada de semánticamente la misma acción.

+0

Gene Belitski: gracias. entonces, ¿básicamente estás sugiriendo usar 'Seq.append' ya que está optimizado? – vis

+0

@vis: No creo que una recomendación universal de "un ajuste para todos" tenga sentido. La respuesta, como de costumbre, sería "depende ...". Sin embargo, cuando conoces los principios subyacentes, puedes tomar decisiones tú mismo. –

Cuestiones relacionadas