=> (merge-with + {:a 1 :b 2} {:a nil :b 2}) NullPointerException clojure.lang.Numbers.ops (Numbers.java:961) これは2つ目のマップの:aの値がnilなため,(+ 1 nil)を実行しようとして失敗してヌルポを起こしています.現在のClojureの問題点として,エラーメッセージがソースコードと対応しておらず意味不明であるという点があるために,このような単純なバグでも発見するのに苦労しました.このバグをcore.typedにより退治していきたいと思います. 最初の型チェック core.typedの中には,cfという式の型をチェックする関数が存在します.(cfはcheck-formの略語のようです)これでmerge-with +の型をチェックしてみましょう.簡単化のため,引数のマップは2つ
皆様,leiningenでclojureライフおくられてますでしょうか? leiningenの不満として,大変遅いということが挙げられます. そこで先日lein run高速化のために色々試して見ました. 結論としては,grenchmanと:bootclasspath true使え!,です. 参考 https://github.com/technomancy/leiningen/wiki/Faster https://github.com/technomancy/grenchman http://maaoo.hatenadiary.com/entry/2013/12/18/013029 何故遅いのか? 原因は以下の2つの模様 leiningen自身の起動が遅い lein run時にバイトコード最適化が入るのだが,それが意外と時間が掛かる grenchmanのインストール grenchmanは
もう1週間以上経ってしまったけど、10/10に開かれたClojure夜会に参加してきた。 Clojure 夜会(Evening Party) - Clojure大好き! | Doorkeeper 平日の夜から(しかも東京で)のイベントだったので最初は参加は難しいなぁと思っていたのだけど、休みがギリギリとれたので4日前くらいになって急遽参加することにした。 発表について せっかくわざわざ東京まで行くのにただ話を聞いているだけというのももったいないなと思い、LT枠も余っている様子だったのでそこから急造でネタごしらえ。自分が最近やっていることでネタになりそうなおもしろい話が特になかったので、去年くらいからちょくちょく海外のClojureコミュニティの人たちのブログで話に挙がるStuart Sierra*1が提案するClojureワークフローについて紹介することにした。 当日の発表資料はこちら。
Clojure の型ヒント (type hinting) とプリミティブヒント (primitive hinting) との違いを整理し,これら 2 つを同時に扱うヒントを紹介します. Clojure では Java メソッド呼び出しの際にパラメータに対して型ヒントをつけることができます.そして,メソッドのレシーバに型ヒントをつけたり,オーバーロードされたメソッドの引数に型ヒントをつけたりすることで,コンパイル時に実装を決定でき実行時のリフクレクションを避けることができます.これは,Clojure で Java と同等の実行速度を得るために必須の作業になります. たとえば,Long/getType は, getType(char ch)getType(int codePoint)の 2 つのシグニチャをもつので,型ヒント無しではコンパイル時に実装を決定できません. user=> (defn
この記事は、Clojure Advent Calendar 2011の2日目の記事です。 Clojureを導入するには Clojureをプロジェクトで使いたい、という現場の要望は結構多いかと思う。 安心してほしい。 フロントエンドにいきなりClojureを使うのはさすがに通りにくいと思うが、 バッチ等をJava(もしくはJVMで動く何か)で動かしているならClojureでそのJavaのバッチを置き換えられる。 置き換えるのはとても簡単だし、周囲の理解や上司の理解も得られるのではないだろうか。 何と言ったってコンパイルしてしまえばプロダクトコードは関係なくなる。 動いていてほしいのはバッチで、コードを気にするのはあなたで、あなたが快適に仕事ができるなら今すぐJavaをすててClojureでコードを書こう。 開発はleiningenで Clojureで何か作るときは基本はleiningenを使
Clojure の protocol でモナドを定義したい!! そう思ったけれど、 protocol の仕組み上 return の定義がけっこう難しいのである。 なぜかというと protocol という仕組みは第一引数に依る分岐なので、型クラスのように型に依る分岐ではないからである しかしこれをいい感じに解決する構造を考えた。 まず、 MonadUnit と MonadBind 、 そしてそれらを対応するデータ型に変換する monad-context 関数を持つ Monad protocol を定義する。 たとえば (maybe-context (MonadUnit. 1)) などとすると (Just. 1) が返されるわけである それから、 return a は単に (MonadUnit. a) とする。 そして m >>= k は、もし m が具体的なデータ(つまり、MonadUnit
Learning Clojure by building a digital Jackson Pollock. This article and the source code backing it can be found on GitHub. Below is an example of what we will be building, running the code found in this page. Add stroke Fill canvas Jackson Pollock He was an abstract artist who lived through the first half of the 20th century and is most famous for his drip paintings. This style of painting involv
Understanding Clojure transducers through types Aug 7, 2014 · 9 minute read · Comments Clojuretransducerstypeshigher-rank typesHaskellmonadstype classesScalaRich HickeyJohn LaunchburySimon Peyton Jones Yesterday, Rich Hickey published a blog post, “Transducers are Coming”, which attracted a lot of attention. I have a confession to make, which I have made before: I find it very difficult to underst
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く