タグ

ブックマーク / tanakh.hatenablog.com (2)

  • Rustでメモ化を行うためのシンプルなライブラリを作った - 純粋関数型雑記帳

    TL;DR 一行追加するだけで関数をメモ化するマクロを作った。 成果物はこちら https://docs.rs/memoise/ 背景 同じ引数に対して同じ値を返す関数(いわゆる参照透明だったり数学的だったりな関数)では、 関数の計算結果を保存しておくことによって計算を高速化したりすることができます。 このようなテクニックを関数のメモ化(memoise, memoize, memoization)などと呼びます。 特に再帰的に定義される関数についてメモ化を行うことによって、 動的計画法の実装をシンプルで直感的なものにできたりします。 しかし、関数のメモ化はやりたいことが自明なのにもかかわらず、 毎回手で書いていると微妙に面倒だったり、うっかりメモ化忘れで計算量が爆発してしまったり、 ちょっと辛いところがありました。 特にRustを使っていると、グローバル変数を雑に使うことを許して貰えないの

    Rustでメモ化を行うためのシンプルなライブラリを作った - 純粋関数型雑記帳
    komlow
    komlow 2020/02/03
  • 2004-07-30

    実は昨日の話題はこれから書こうとする話とつながりがあるのだ。 (直接的には無いけど) (序) 突然であるが、Haskellは文字列処理が強力だと思う。 それも最強レベルに。 他のいわゆる文字列処理が得意であるとされる言語のように 正規表現による置換が可能であるとか、文字列がオブジェクトで 有用なメソッドがたくさん使えるとかそういった 小手先のものではなくてもっと根的なレベルで強力なのである。 それはHaskellに於いて文字列が文字のリストであらわされていることに 起因する。わからない人から見ると文字列がリストであるということは Cにおいて文字列が配列で表されているのとかぶるかもしれない。 Haskellが文字列をリストとして持っていてうれしいというのは Haskellが全言語中でもほとんど最強のリスト操作能力を持っているからである。 Cで文字列が配列になっていても何もうれしくないのは、

    2004-07-30
  • 1