Word の変更履歴を消す
Word では修正内容を履歴として残すことができます。
それはそれで役に立つのですが、もう履歴はいらないという時もあります。
今回はそんな時に履歴内容を消す方法についてです。
まず、変更履歴を残す方法です。
[校閲] タブの [変更履歴の記録] を選択すると履歴を記録し始めます。

もう一度 [変更履歴の記録] を押して、選択状態を解除すると記録するのをやめます。ただ、一度記録した履歴は消えません。
このままだとファイルを再度開いた場合に履歴情報を表示する状態になっているので、ちょっと面倒です。
こういった場合には同じ [校閲] タブにある [変更箇所] グループの [承諾] を押すと変更が受け入れられて、 記録された履歴が無くなります。

C# でのカリー化の使用
関数型プログラミングにはカリー化と呼ばれる手法があります。
C# は関数型言語ではありませんが、これを知っていると LINQ などの高階関数を使った処理に役に立ちます。
今回は C# でカリー化をやる方法について説明します。
カリー化
カリー化というのは2 つ以上の引数を持つ関数を 1 つの引数の関数の組み合わせになおすことを言います。
次のような 2 つの引数を取る関数をカリー化してみます。
static int Plus(int a, int b) { return a + b; }カリー化は戻り値として無名関数(匿名メソッド、ラムダ式)を返すことによって実現します。
static Func<int, int> CurriedPlus(int a) { return (b) => a + b; }C# は静的型付けなので型を指定する必要があります。 戻り値の
Func<int, int>
が int(1 つ目) を引数として int(2 つ目) を返す関数を表しています。また、 戻り値の関数内では関数内でローカルな引数 a を使っていますが、 クロージャーという技術によって、うまいこと残してくれるようになっています。
元の関数(Plus)を使ってカリー化を行う場合には次のようになります。
static Func<int, int> CurriedPlus2(int a) { return (b) => Plus(a, b); }
Plus(2, 3)
と書いていたものが CurriedPlus(2)(3)
と書けるようになりました。これがカリー化です。
Console.WriteLine("{0}", Plus(2, 5)); // 7 Console.WriteLine("{0}", CurriedPlus(2)(5)); // 7
カリー化した関数を使う
カリー化した関数を作りましたが、ただそれだけだと「それがなんの役に立つの?」と思われるかもしれません。 そこで実際に使ってみましょう。カリー化した関数は LINQ のように関数を渡して処理を行う場面で使用します。
そういった高階関数を使ったデータ処理自体の利点については以前の記事を見て下さい。 例として、次のような LINQ を使ったデータ処理があったとします。
var src = new[] {1, 2, 3, 4}; Console.WriteLine("{0}", Dump(src.Select(p => 2 + p ))); // {3, 4, 5, 6}ここで、カリー化した関数を使ってみます。
Console.WriteLine("{0}", Dump(src.Select(CurriedPlus(2)))); // {3, 4, 5, 6}map は一つの引数の関数のみを受け付けるのですが、関数がカリー化してあることによって、そこに関数を渡せるようになっています。こういった関数を求められた型にあわせて当てはめることをバインディングと呼んだりもします。
バインディング自体は C++ などにもあり、やり方はいろいろのですが、カリー化した関数を使う方法は見やすく、柔軟性も高いのではないかと思います。
サンプルコード
説明で使用したサンプルのコードは以下のリンクからダウンロード(リンク先を保存)できます。 コンパイルする場合は以下のコマンドを実行します。> csc CurriedSample.cscsc.exe を使用したコンパイル方法については以前の記事を見て下さい。