有没有办法在 F# 序列表达式中进行自引用?例如:
[for i in 1..n do if _f(i)_not_in_this_list_ do yield f(i)]
这可以防止插入重复的元素。
编辑:一般情况下,我想在应用 f() 之前知道 this_list 的内容,这在计算上非常昂贵。
编辑:我在上面的例子中过于简单化了。我的具体情况是计算量大的测试 T (T: int -> bool) 具有属性 T(i) => T(n*i) 所以代码片段是:
[for i in 1..n do if _i_not_in_this_list_ && T(i) then for j in i..i..n do yield j]
目标是减少 T() 应用程序的数量并使用简洁的符号。我通过使用可变辅助数组完成了前者:
let mutable notYet = Array.create n true
[for i in 1..n do if notYet.[i] && T(i) then for j in i..i..n do yield j; notYet.[j] <- false]