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

时间:2012-03-19 16:56:02

标签: 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; ...]

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

[1]使用上面的Seq.append

1 个答案:

答案 0 :(得分:8)

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

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

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