タグ

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

  • Clojure勉強日記(その14 Clojureにおけるシーケンスの特徴とJavaオブジェクトの扱い - 夢とガラクタの集積場

    こんにちは。 そろそろ、書籍も説明的な内容が増えてきたので単にべた書きではなく、 理解したことをまとめていく方針を取ります。 1.遅延シーケンスと無限シーケンス JavaにあってClojureにないシーケンスの一番の特徴がこの遅延シーケンスと無限シーケンスです。 遅延シーケンスはその名の通り、「各要素が必要になった場合に初めて評価される」シーケンス。 無限シーケンスは「自然数全て」のような、理論上無限に値が存在するシーケンス。 通常のプログラミング言語では「無限シーケンス」というのは具体化しえない。 生成した時点でメモリが溢れて終わり、でしょうから。 ただ、Clojureでは遅延シーケンスによって 「必要になった時点で評価する」「ユーザ側で必要な分だけ取得する」ということが可能なため、 無限の値を生成するシーケンスを記述することが可能となる。 #まぁ、値を限定する関数とペアで使用しないと最

    Clojure勉強日記(その14 Clojureにおけるシーケンスの特徴とJavaオブジェクトの扱い - 夢とガラクタの集積場
  • Clojure勉強日記(その9 3.2 性能の最適化 - 夢とガラクタの集積場

    こんにちは。 徐々に書けることが広がってきてはいますが、まだ4分の1。 とりあえず地道に続けます。 前章で述べたJavaの呼び出しで述べた方法を使ってJavaを呼ぶのがClojureでは普通。 これで基的には十分に高速のはずだが、さらに高速化を行うことができる。 これは外部IFには影響を与えずに出来るため、後からチューニング・・・ということも可能。 1.性能のためにプリミティブを使う これまではパラメータに型情報をつけていなかった。 #メタデータで型ヒントをつけられるということについては書いてましたが。 これはコードをすっきりさせるが、その分データ型がわかりにくくなり、性能上のオーバヘッドも発生する。 → このやり方をダックタイピングという模様。 例として、1からnまで足し合わせる関数を考える。 (defn sum-to [n] (loop [i 1 sum 0] (if (<= i n

    Clojure勉強日記(その9 3.2 性能の最適化 - 夢とガラクタの集積場
  • 1