We have to start with a picture. Or hey, just go download it and see for yourself. This is the new Light Table - rewritten from the ground up after having learned a ton about what it’s going to take to make a truly extensible and connected environment. There are a lot of interesting ideas under the hood that make up the core of this new implementation, but the important part is that it is a solid
Clojureでエラー値を返すかもしれない関数ってどう書くのだろうとちょっと考えてみる。 Scalaだと例外はあまり使わず、EitherやValidationを使う派。 やはり、コンパイラの恩恵を受けることが出来る書き方が良い。 しかし、Clojureは動的型付けの言語。 コンパイラの恩恵は特にない。 なので、 どのような値が返ると扱いやすいかを考える。 Clojureは基本的に nil返す 例外投げる の2通りだと思う。 Clojure標準のライブラリはnilを渡してもそれなりに動作するし、if-let,when-let,fnilなどの関数も用意されている。 しかし、nilだとどのようなエラーだったのか判別がつかない。 このような時に例外を使って、エラーの種類によって投げる例外を変えれば良いのだと思う。 Clojureの例外を投げるような関数は以下のように書ける。 この場合は、Java
Clojureで並列・並行処理といえばSTMやエージェントが有名だと思いますが、お手軽な関数も用意されているみたいなので、調べてみました。 pmap map関数の並列版です。与えたシーケンスに対して、関数を並列に適用してくれます。 (time (println (let [sleep-and-double (fn [v] (Thread/sleep 3000) (* 2 v))] (pmap sleep-and-double (range 1 6))))) ;; => (2 4 6 8 10) "Elapsed time: 3058.024539 msecs" (shutdown-agents) 少し前にこの関数を使ったエントリを書きましたが、どうもシーケンスの数だけスレッドが起動するっぽいので、その点は注意が必要そうです。 あと、裏でエージェントを使っているようなので、shutdown-
最近はClojureばかり書いているので、良い所ばかりでなく、気になるところも見えてきました。 なにか意見をもらえるかもしれないので書き並べておきます。 セルフホスティングして欲しい Clojureのソースコードを読むときに、高確率でJavaのコードを読まなければいけないので悲しくなります。 やはり、gen-classとかでは物足りないのかなあ? それとも、セルフホスティングにはあまりヤル気がないのか・・・・ clojure.langのJavaDoc欲しい ソースコード追うのが面倒なので。 Protocolをもっと使って欲しい 自分で新しいデータ型を作った時に、既存の関数を使うためにclojure.langの得体の知れないinterfaceを実装するわけですが、Protocolとして存在すればClojureの中で完結するのでうれしいのだけど、これはデータ型がJavaに依存しすぎてて簡単には
Clojure製統計解析アプリ「Incanter」は無料かつjarファイル一つでお手軽に実行できる、その上Javaの豊富なライブラリを利用したり、描画に特化したProcessingという処理系でリッチなアニメーションやインターフェイスを実装できるという面白いアプリケーションです。また、JVM上で動くため、HadoopやLuceneなどにシームレスで適用できますし、GoSenなど形態素解析アプリも簡単に呼び出せるため、自然言語処理やテキストマイニングにも活用できます。一番重要なことは、Clojureであるということ、つまり皆さんの愛するLispでコーディング出来るということです。もう一度言いますが、Lispで統計解析が出来るという喜b(略)。 無料の統計解析アプリというとR(あとアプリではありませんが、Python-Scipy/Numpyなど)が挙げられると思います。正直な話、Incante
Clojure | 18:34 | Clojureのマルチメソッドを使っていると、自分で定義した型でディスパッチしたいと思うことがある。しかしdefstructを使ってもうまくいかない。 user> (defstruct Foo :a :b) #'user/Foo user> (struct Foo 1 2) {:a 1, :b 2} user> (class *1) clojure.lang.PersistentStructMap user> (defmulti my-println class) #'user/my-println user> (defmethod my-println Foo [foo] (println "foo")) # user> (my-println (struct Foo 1 2)) ;=> error ; Evaluation aborted. defs
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く