Да, это ожидается. Не гарантируется pure. Вы можете определить последовательность, которая будет давать разные значения каждый раз, когда вы перебираете их. Если вы дважды вызываете Seq.take 1
, вы можете получить разные результаты.
Рассмотрим, в качестве примера, эта последовательность:
open System
let r = Random()
let s = seq { yield r.Next(0, 9) }
Если вы звоните Seq.take 1
на том, что вы можете получить разные результаты:
> s |> Seq.take 1;;
val it : seq<int> = seq [4]
> s |> Seq.take 1;;
val it : seq<int> = seq [1]
Использование Seq.head
не собирается, чтобы помочь вам либо :
> s |> Seq.head;;
val it : int = 2
> s |> Seq.head;;
val it : int = 6
Если вы хотите, чтобы гарантировать детерминистическое b ehaviour, используйте вместо этого List
.
Да, я должен использовать Seq.head во второй строке, но я хотел бы поделиться кодом, с которым я работаю дословно. :) –
Можете ли вы изолировать случаи, когда это происходит? –