ジッパー

ジッパー

上級

説明

二分木のためのジッパーを作ります。

ジッパーは、データ構造の中を移動したり、そのデータ構造を操作したりするための、純粋関数型の手法です。ジッパーは基本的に、あるデータ構造と、そのデータ構造内を指すポインタ(これをフォーカスと呼びます)を保持しています。

例えば、ローズツリー(各ノードが値と子ノードのリストを持つ木)が与えられたとき、ジッパーは次のような操作に対応しているかもしれません。

  • from_tree(ローズツリーからジッパーを取り出します。フォーカスは根ノードにあります)
  • to_tree(ジッパーからローズツリーを取り出します)
  • value(フォーカスノードの値を取得します)
  • prev(フォーカスを同じ親の前の子ノードに移動します。新しいジッパーを返します)
  • next(フォーカスを同じ親の次の子ノードに移動します。新しいジッパーを返します)
  • up(フォーカスを親ノードに移動します。新しいジッパーを返します)
  • set_value(フォーカスノードの値を設定します。新しいジッパーを返します)
  • insert_before(フォーカスノードの前に新しい部分木を挿入します。挿入された部分木はフォーカスノードのprevになり、新しいジッパーを返します)
  • insert_after(フォーカスノードのあとに新しい部分木を挿入します。挿入された部分木はフォーカスノードのnextになり、新しいジッパーを返します)
  • delete(フォーカスノードとそのすべての部分木を削除します。フォーカスは、可能であればnextノードへ、それができなければ可能であればprevノードへ、それもできなければ親ノードへ移動します。新しいジッパーを返します)
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Haskell Exercism

ジッパーを始める準備はできましたか?

Exercismに登録すれば、107個の演習、そして本物の人間によるメンタリングとともに、Haskellを学んでマスターできます。すべて無料です。