関数型音楽に乗り換えたいこの広告は、90日以上更新していないブログに表示しています。実装したライブラリを作りました。出たので、それを機にアップデートしてみました。名前空間はもともと単発の予定でつけたので、めっちゃ適当でした。今回は改めて名前を付けなおしました。あと、最近よくわかってませんが、インターフェースだけ外出しして実装系を別ライブラリにするっていう方法を考えていまして。今回その方法を試してみました。プロジェクトみたいな。準拠しているので、だいたいの実装系で使えます。落としてくる時に依存解決で一緒に。言って感じで想像しています。パッケージ作ってないけど。今回実装にあたり、以下のサイトを参考にしました。Networkswww.slideshare.netこちらの方のスライド、めちゃくちゃわかりやすいのですが、この中に出てくる「完備辞書」と呼ばれるものを目指してみました。関数を実装しなければならないらしいので、書いてみました。ArgumentOutOfRangeException();まずは公開メソッド。n回目という部分を実装するため、引数は2つ必要でした。いうわけで、引数1つの時は強制的に最初に出てくる位置を取得するようにしています。そもそも文字が含まれていない可能性があるので、その場合は例外をスローしています。0;そして内部の実装。考え込んで、このような形にしました。何をしているかというと、実は「n番目に出てくる要素Xのインデックスを取得しろ」という情報を「Xを持っている葉」まで伝達しています。すると、「Xを持っている葉」にとって「n番目に出てくる要素Xのインデックス」は「n」なので、そのまま受け取った「n」を返します。どちらの節にあるかを判別し、「その節のn番目に出てくる要素は、自分自身ではy番目」という逆引きを行い、それを返します。いうアルゴリズムを続けて、最後にオリジナルのシーケンスの中でのインデックスが変えるという寸法です。