在F#序列的开头添加元素的更好方法

vis*_*vis 9 f# sequence

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; ...]
Run Code Online (Sandbox Code Playgroud)

可能重复,但没有真正回答我的问题.

[1]Seq.append如上所述使用

Gen*_*ski 8

确实可以回想起F#序列是一个计算.无论你如何实现它,在一天结束时你应该有一个新的计算,如果被枚举,首先产生附加的元素,然后产生旧的序列.在大多数直接形式中,这可以使用序列表达式来实现:

> let mySeq = {1..5}
> seq { yield 0; yield! mySeq };;
val it : seq<int> = seq [0; 1; 2; 3; ...]
Run Code Online (Sandbox Code Playgroud)

Seq.append 库函数只是语义上相同动作的优化实现.