答えて
素晴らしいブログenfranchised心はこのトピックに関する素晴らしい記事があります。
http://enfranchisedmind.com/blog/posts/ocaml-lazy-lists-an-introduction/
ます。また、これに対処するための標準的なライブラリですhttp://batteries.forge.ocamlcore.org/doc.preview%3Abatteries-beta1/html/api/Lazy%5Flist.html
をチェックアウトすることができます。
この質問はまた、この質問に非常に似ています
使用ストリーム:カスタムlazy_list
タイプを使用
let f x = Stream.from (fun n -> Some (x * int_of_float (2.0 ** float_of_int n)))
または
let f x =
let next = ref x in
Stream.from (fun _ -> let y = !next in next := 2 * y ; Some y)
:
type 'a lazy_list =
| Nil
| Cons of 'a * 'a lazy_list lazy_t
let rec f x = lazy (Cons (x, f (2*x)))
あなたが手でそれをしたい場合は、私はあなたが主なオプションに持っていると言うだろう:ephemientは(彼の解決策は少し壊れている除く)が言ったように
は、カスタム
lazy_list
タイプを使用します:type 'a lazy_list = | Nil | Cons of 'a * 'a lazy_list let head = function | Nil -> failwith "Cannot extract head of empty list" | Cons (h, _) -> h let tail = function | Nil -> failwith "Cannot extract tail of empty list" | Cons (_, t) -> t
は、サンクの種類を使用します(それをサポートしていない言語で遅延評価を実装するために使用されるものなど)。リストを関数
unit -> 'a
として定義し、現在の要素から次の要素を取得する方法を示します(ストリームを使用する必要はありません)。0 1 2
:たとえば、すべての自然な整数のリストを定義するために、あなたは
print_int (naturals());
print_int (naturals());
print_int (naturals())
を行う場合は、次のような出力が得られます
let make_lazy_list initial next =
let lazy_list current() =
let result = !current in
current := (next !current); result
in lazy_list (ref initial)
let naturals = make_lazy_list 0 (function i -> i + 1)
ザ・操作を行うことができますまた、私のOCaml Network Application Environment Core Foundationには、Cf_seq
という遅延リストモジュールがあります。実際には、機能的なデータ構造の全体を書きました。 2節のBSDライセンスの下で利用可能です。楽しい。
更新:コードの名前が「Oni」に変更され、BitBucketでホストされています。また、GODIパッケージを使用することもできます。
- 1. ocamlの遅延評価
- 2. ocamlでの遅延評価
- 3. 逆リストと遅延表示
- 4. RxJava遅延オブザーバブルの遅延
- 5. スレッドの遅延 - 遅延
- 6. OCaml:リストのリスト
- 7. ルビー、遅延ジョブ、遅延:バックエンド:ActiveRecordの
- 8. Androidで巨大なUDP遅延/遅延
- 9. アニメーション遅延アニメーション遅延の増加
- 10. SQL ExpressとSQL CE、遅延/遅延
- 11. 遅延ロードによる遅延ポップアップタグ
- 12. 遅延評価とPythonの遅延バインド?
- 13. 遅延
- 14. 遅延
- 15. 遅延
- 16. GAE:遅延の遅いリクエスト
- 17. アンドロイドスライドショーの遅延が遅い
- 18. Accessibility.dllの遅い遅延ロード?
- 19. ソケットプログラミング:遅延
- 20. Cssアニメーションランダム遅延
- 21. マウスホイールイベントの遅延
- 22. clojure.java.jdbc遅延クエリ
- 23. 遅延AWSコードパイプライン:
- 24. 遅延キューソリューション
- 25. SQLALchemy遅延コンパイルクラス
- 26. メソッドコールの遅延
- 27. ロケーションキャプチャエラー - 遅延
- 28. バグキープアライブ遅延
- 29. 遅延コレクション
- 30. Django:WSGI遅延
あなたはレイジーリストの特定の実装を意味するのか、それとも一般的な概念だけを意味しますか?また、実際にはlazy _lists_(値は一度計算されるとメモに記録されます)が必要ですか、ストリームだけが必要ですか(値はメモではなく、したがって一度しか読み取れません)。 –
ストリームを探しています。 –