このような構造は、リアルタイムアプリケーション(ユーザーインターフェイスなど)に必要です。(ユーザーは、ボタンのクリックに0.1秒または0.2秒かかるかどうかは気にしませんが、100回目のクリックで卓越した遅延計算が強制され、続行するのに10秒かかるかどうかは気になります。)
私は岡崎の論文「純粋関数型データ構造」を読んでいました。彼は、償却された境界を持つ怠惰なデータ構造を、すべての操作で同じ最悪の場合の境界を持つ構造に変換するための興味深い一般的な方法について説明しています。アイデアは、各更新で未評価のサンクの一部が強制されるように計算を分散することです。
Haskellに標準コレクション(、、など)のそのような実装はありますMap
か?Set
コンテナパッケージには
各操作の宣言されたコストは、最悪の場合または償却されますが、構造が共有されている場合でも有効です。
したがって、単一の操作の最悪の場合の範囲は保証されません。のような厳密なバリアントがありますがData.Map.Strict
、キーと値は厳密です。
キーと値の引数はWHNFに対して評価されます。キーと値は、マップに保存される前にWHNFに評価されます。
その構造の(可能な)厳密さについては何もありません。