nums确实是int的seq。知道发生了什么事吗? 此功能行旨在等同于C#的DefaultIfEmpty Linq功能。
一般的想法是采用以空格分隔的字符串行,并写出哪些字符串发生次数。
代码:
{{1}}
示例输入:
3
9 2
4 5 2 5 4 3 1 3 4
答案 0 :(得分:9)
因此,F#中的序列使用延迟评估。这意味着当您使用map
,where
,take
等功能时,不会立即评估结果。
仅在实际枚举序列时评估结果。当您调用Seq.isEmpty
时,您会触发对MoveNext()
的调用,这会导致对结果序列的第一个元素进行求值 - 在您的情况下,这将导致对大量函数进行求值。
在这种情况下,InvalidOperationException实际上是由Seq.take
触发的,如果序列没有足够的元素,它将抛出。这可能会让您感到惊讶,来自C#,其中Enumerable.Take
将占用所请求的元素数量,但如果到达序列末尾则可能会减少。
如果您希望在F#中使用此行为,则需要将Seq.take
替换为Seq.truncate
。