F# シーケンス式で自己参照を持つ方法はありますか? 例えば:
[for i in 1..n do if _f(i)_not_in_this_list_ do yield f(i)]
これにより、重複する要素の挿入が防止されます。
編集: 一般的に、計算コストが非常に高い f() を適用する前に、this_list の内容を知りたいと思います。
編集:上記の例では単純化しすぎています。私の特定のケースは、プロパティ T(i) => T(n*i) を持つ計算コストの高いテスト T (T: int -> bool) であるため、コード スニペットは次のようになります。
[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]