4

データに遅延部分が含まれているかどうかをチェックする関数が clojure にありますか?

バックグラウンド:

私はclojureで小さなサーバーを構築しています。各接続には、状態、入力ストリーム、および出力ストリームがあります

サーバーは入力ストリームから 1 バイトを読み取り、その値に基づいていくつかの関数の 1 つを呼び出します (状態と入力および出力ストリームをパラメータとして)。関数は、入力ストリームからさらに読み取り、出力ストリームに応答を書き込み、状態を返すことを決定できます。この部分がループします。

状態に遅延部分が含まれていない限り、これはすべて正常に機能します。状態に遅延部分がある場合、(後で別の関数の実行中に) 評価されるときに、入力ストリームからの読み取りと出力ストリームへの書き込みが開始される可能性があります。

したがって、基本的には、これらすべての関数に事後条件を追加して、返される状態のどの部分も遅延していないことを示したいと考えています。遅延シーケンスをチェックする関数はありますか。状態自体が遅延シーケンスであるかどうかを確認するのは簡単だと思いますが、たとえば、値の1つが遅延しているハッシュマップを含むベクトルが状態にあるかどうかを確認したいと思います。

4

2 に答える 2

3

で評価を強制することにより、遅延していないことを確認する方が簡単ですdoall

数年前にストリーム処理暗号アプリでこの問題が発生し、いくつかの方法を試して、最終的に遅延側を受け入れ、入力ストリームを遅延シーケンスでラップし、データが利用できなくなったときに入力ストリームを閉じました。ストリームを閉じることへの懸念と、ストリームに何が含まれているかについての懸念を効果的に分離します。追跡している状態は、開いている状態と閉じている状態よりも少し洗練されているように聞こえますが、同様の方法で分離できる場合があります。

于 2012-03-28T22:12:16.487 に答える