我有以下代码块:
let rec Sieve p nums =
let filtered = query { for n in nums do
where (n % p = 0 && n <> p)
select n } |> Seq.toList
if filtered = nums then filtered // Error
else
let nextIndex = 1 + (filtered |> List.findIndex (fun x -> x = p))
if nextIndex > filtered.Length then filtered
else
let next = filtered.[nextIndex]
Sieve next filtered
当我编译这个时,我得到'类型''a list'与'System.Linq.IQueryable<'a>'不兼容。在我用注释错误标记的行上。
我发现如果我为 Sieve 添加类型注释以使其成为 nums (nums: int list),那么它将正常工作。但是,如果我替换 nums 就行了
if filtered = nums then filtered
和:
if filtered = [1..10] then filtered
然后我得到相同的错误,指的是在线过滤:
Sieve next filtered
因为当我被过滤时,我在使用它之前将其直接转换为列表,为什么会出现此错误?