GaucheRefj:遅延シーケンス GaucheRefe:Lazy sequences

遅延シーケンスはリストのようなデータ構造ですが、要素は必要になるまで 計算されません。内部的には、これはcdrの評価が遅延される特別な種類の ペアを使って実現されています。しかし、Schemeのレベルで 「遅延ペア」のような特別なデータ型が見えることは決してありません。 遅延ペアにアクセスしようとした途端、Gaucheは自動的に 遅延されていた計算をforceして、遅延ペアは通常のペアに変化してしまうからです。

これはつまり、遅延シーケンスをcar、cdr、mapといった 通常のリスト処理手続きにそのまま渡せるということです。

A lazy sequence is a list-like structure whose elements are calculated lazily. Internally we have a special type of pairs, whose cdr is evaluated on demand. However, in Scheme level, you’ll never see a distinct “lazy-pair” type. As soon as you try to access the lazy pair, Gauche automaticlaly force the delayed calculation, and the lazy pair turns into an ordinary pair.

It means you can pass lazy sequences to ordinary list-processing procedures such as car, cdr or map.

遅延シーケンスとストリーム - QA@IT

Gaucheでは無限列の実装として遅延シーケンス(Lazy sequences , gauche.lazy)とストリーム(Stream library ,があります。この2つをどのように使い分けていけばいいのでしょうか?

2つの実装の性能の違いや利用上の注意点を知りたく思い質問させていただいきました。 つまり、遅延シーケンスに適した状況、ストリームに適した状況とはなにかということです。

Tags: lseq, 遅延シーケンス, gauche.lazy

More ...