Haskell-zippers
提供:Dev Guides
Haskell-ジッパー
Haskellの Zippers は、基本的に tree などのデータ構造の特定の場所を指すポインターです。
完全な二分木として表現できる5つの要素 [45,7,55,120,56] を持つ tree を考えてみましょう。 このリストの最後の要素を更新する場合は、すべての要素を走査して、更新する前に最後の要素に到達する必要があります。 右?
しかし、 N 要素を持つツリーが [(N-1)、N] のコレクションであるような方法でツリーを構築できたらどうでしょう。 次に、不要な*(N-1)*要素をすべて走査する必要はありません。 N番目の要素を直接更新できます。 これがまさにZipperのコンセプトです。 ツリー全体を走査せずにその値を更新できるツリーの特定の場所にフォーカスまたはポイントします。
次の例では、リストにZipperの概念を実装しています。 同様に、*ツリー*または*ファイル*データ構造にZipperを実装できます。
上記のプログラムをコンパイルして実行すると、次の出力が生成されます-
ここでは、前方または後方に向かって、弦全体の要素に注目しています。