一個前の記事で言及している Boot についてです。 boot-clj/bootgithub.comああ、ロゴが可愛いですね。本当に。さて、さくさくっと 1 週間くらい触ってきて知見もそこそこにたまってきたので公開します。 目次 思いの外チュートリアルが長くなったので… イン…
めちゃくちゃ可愛いロゴが気になる Clojure のビルドツール Boot について色々と調べたので書き残しておく。だらだら書いてたら長くなってしまったので Boot のインストール記事を分けた -> Boot を使いはじめる(インストールから基本的な使い方まで) - (def…
How do I get the instance of the class when using gen-class毎日 StackOverflow は見てるんですが、まさか @tnoda_ さんが回答者として出てくるとは思わなかった。gen-class 使って出来るクラスのインスタンスメソッドの中で "this" にアクセスしたいんだ…
最近、自宅の ThinkPad X220 で Cider-mode を起動すると segfault が起こるようになった。一度起こるとマシンを再起動するまで JVM が起動できなくなってしまう*1。まぁそういうきっかけがありつつ、開発しているときに Cider を起動するだけで 30 秒程待つ…
How to split a number in Clojure?質問者 Geem7n は効率的でない書き方なら出来るんだけど、効率の良い数字を分割する方法を知りたいとのこと。 (->> (str 942) seq (map str) (map read-string)) ;=> (9 4 2) ;; and (defn digits [n] ;YUK!! (cons (str (…
Apply a list of function to parameter, clojurestackoverflow.com以下のように関数のリストを作って map で適用しようとすると 5 のリストが返ってきてしまう。 (def ops '(+ - * /)) (map #(% 2 5) ops) ;=> (5 5 5 5) なんで関数呼び出ししてるはずなの…
Clojure を始めてからいくつかの GitHub リポジトリをみていると「 lein-template あるから lein new foobar your-app-name ってすればいいよ」みたいなのを稀によく見かける。けど、 leiningen がデフォルトで提供しているテンプレートの数ってそんなに多く…
昨日まで読んでいた Mastering Clojure Macros の中で &env と &form に触れているところがあった。まぁ正直何に使ったらいいのか分からなかったし、 &env と &form を参照できたとして「で?」である。これらが何の為にあるのか、というのはどうもこの辺を読…
読んだ。On Lisp と LET OVER LAMBDA 読んでたら必要ないかなーとは思うけど、実際の Clojure の著名ライブラリとかで使われているテクニックを本に沿って知ることができるのでそういう意味では良い本かと思います。僕の場合 On Lisp, LOL の内容をあんまり…
How to substitute path to home for "~"?stackoverflow.comSystem/getproperty でユーザーホームを取得して ~ を置換するようなマクロ書けばいいよ、とのこと。(後で少しこの記事は綺麗にすると思う)
venantius/ultragithub.com実際綺麗になるんですけど、 Emacs の上でしか REPL 起動しないので意味なかった…。
How can I programmatically generate record definitions?stackoverflow.comこれ、答えはすっと出て朝から回答しようと思ったけど、電車に乗ってる間に先を越されてしょぼんしています。 ただ、僕よりずっといい答えが書かれているのでさくっと書いてみます…
まえがき だいたい 2 週間くらい Clojure を書いているとライブラリのバグを綺麗に踏み抜いたりマクロの沼に引きずりこまれたりと、まぁやたらとデバッグする機会があります。それで先日からライブラリを clone して書きなおして lein install して…などして…
How to make this sieve function lazy?先日僕も似たような実装しようとしてハマったのを思い出しました。 回答には「本物のエラトステネスの篩 *1」という論文があるので参考にするといいと書いてあります。 また、それについての綺麗な実装もあるので参照…
Circular definition in Clojure (defn f1 [] (lazy-seq (cons 0 (f2)))) (defn f2 [] (lazy-seq (cons 1 (f3)))) (defn f3 [] (lazy-seq (cons 2 (f1)))) こうすると f1 の評価タイミングで f2 が存在しないのでコンパイラがエラーを吐くんだけどどうしたら…
ちょっとコード追いかけながら Clojure の実装がイケてないのかなーって思って Clojure の実装そのものを調べたりしたいことってありますよね。 そういうときのために Clojure それそのものをビルドして使う方法です。 Clojure 自身のビルドの仕方 git clone…
xsc/lein-licenseちょっと便利。profiles.clj に [lein-license "0.1.2"]を :plugins のとこに追加するだけ。プロジェクトの下で lein license update mit とかすれば自動的にライセンス部分で必要な部分を全部書き換えてくれる。欲を言えば profiles.clj の…
Why inserting 1000 000 values in a transient map in Clojure yields a map with 8 items in it?興味深かった。ベクターに対して同様のことを行った場合は期待通りに動くけど、マップに対してだと動かないという例。 (count (let [m (transient [])] (doti…
mbuczko/awesome-clojureだいたいこの辺を読むといいよ!とのこと。 もし何か欠けていたら PR から誰でも追加出来るようです。
Clojure split lines with all empty lines kept文字列中の最後の空行を Clojure だとどうやって残したらいいの?という質問。 user=> (require 'clojure.string) nil user=> (clojure.string/split-lines "a\n\nb\n") ["a" "" "b"] user=> (clojure.string/s…
Clojure - why is the "do" statement necessary for grouping?まぁそうなるよね、という例。 (defn x [] (if true (do (println "a") (println "b")))) => (x) a b nil do を使えば正常に動くけど、 do を抜かすと… (defn x [] (if true ((println "a") (pr…
(gensym) is always unique, `(symb#) is not -- why?初見だと僕も見事に引っかかった。 (defmacro indirection [name & body] `(do (def name# ~@body) (defn ~name [] name#))) このマクロは一度しか展開されないので、実行する度にいちいち展開されて nam…
Javaでの素因数分解プログラム - 徒然なる情報系日記これ読んでたら Clojure で実装したくなったのでやってみた*1。最終的なコードはこれ。 (ns prime-factorization.core (:gen-class)) (def prime-numbers ((fn f [x] (cons x (lazy-seq (f (first (drop-w…
読みました。結論から言うと、今現時点 (2015/4/12) でもまぁ役に立つ Clojure で Web 開発をするための入門書だと思います。 本の概要 目次 1. Getting Your Feet Wet 2. Clojure Web Stack 3. Liberator Services 4. Database Access 5. Picture Gallery 6…
デバッグについてです。例えば Ruby 界隈だと pry で、 Java な人たちは高性能 IDE に標準装備されているデバッガあるいはプラグインなどを利用していることでしょう。Clojure も最近はデバッガが cider に標準装備されているようです。ちょっとまだこなれて…
Amazing physics going on...xkcd: Real Programmersわろたw
lein-git-deps というのがあるのでこれを使う。tobyhede/lein-git-depsgithub.comprofiles.clj に以下のように追記して {:user {:plugins [[lein-git-deps "0.0.2-SNAPSHOT"]]}} project.clj に :git-dependencies [["https://github.com/tobyhede/monger.gi…
Web Development with Clojure の第 5 章くらいでハマる。このエラーの文言で CSRF だなってことは簡単にわかるんだけど、解決するのに少し悩んだ。 古いバージョン( 0.8.2 当時)の lib-noir だと ring を直接使っていたので、 ring/ring-anti-forgery が依…
Pidgin, IRC, Freenode | Adam MonsenClojure のチャンネルを見たかったので、 Freenode のアカウント取って入った。
Web Development with Clojure を読みながら。 だいたいこの本で使われているライブラリのバージョン古いので最新のものを使って書きながら読み進めているのだけど、見事にハマったよね。こんなエラーが出る。 1. Caused by java.lang.RuntimeException No s…