(define -ayalog '())

括弧に魅せられて道を外した名前のないプログラマ

Boot を使いはじめる(インストールから基本的な使い方まで)

一個前の記事で言及している Boot についてです。 boot-clj/bootgithub.comああ、ロゴが可愛いですね。本当に。さて、さくさくっと 1 週間くらい触ってきて知見もそこそこにたまってきたので公開します。 目次 思いの外チュートリアルが長くなったので… イン…

Clojure の Boot というビルドツールについて

めちゃくちゃ可愛いロゴが気になる Clojure のビルドツール Boot について色々と調べたので書き残しておく。だらだら書いてたら長くなってしまったので Boot のインストール記事を分けた -> Boot を使いはじめる(インストールから基本的な使い方まで) - (def…

gen-class を使ったときにどうやってインスタンスを取得したらいい?

How do I get the instance of the class when using gen-class毎日 StackOverflow は見てるんですが、まさか @tnoda_ さんが回答者として出てくるとは思わなかった。gen-class 使って出来るクラスのインスタンスメソッドの中で "this" にアクセスしたいんだ…

Clojure の開発環境をよりシンプルへ ~ inf-clojure 導入編

最近、自宅の 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) なんで関数呼び出ししてるはずなの…

lein new <template> your-app-name の template に指定出来る template の一覧を作った

Clojure を始めてからいくつかの GitHub リポジトリをみていると「 lein-template あるから lein new foobar your-app-name ってすればいいよ」みたいなのを稀によく見かける。けど、 leiningen がデフォルトで提供しているテンプレートの数ってそんなに多く…

暗黙の引数 &form を使って既に束縛がある場合には何もしない defn を定義してみる。

昨日まで読んでいた Mastering Clojure Macros の中で &env と &form に触れているところがあった。まぁ正直何に使ったらいいのか分からなかったし、 &env と &form を参照できたとして「で?」である。これらが何の為にあるのか、というのはどうもこの辺を読…

Mastering Clojure Macros を読んだ

読んだ。On Lisp と LET OVER LAMBDA 読んでたら必要ないかなーとは思うけど、実際の Clojure の著名ライブラリとかで使われているテクニックを本に沿って知ることができるのでそういう意味では良い本かと思います。僕の場合 On Lisp, LOL の内容をあんまり…

"~" の代わりに何を使えばホームパスを指せる?

How to substitute path to home for "~"?stackoverflow.comSystem/getproperty でユーザーホームを取得して ~ を置換するようなマクロ書けばいいよ、とのこと。(後で少しこの記事は綺麗にすると思う)

Clojure の REPL を綺麗にする Ultra

venantius/ultragithub.com実際綺麗になるんですけど、 Emacs の上でしか REPL 起動しないので意味なかった…。

どのようにすればプログラムでレコードを定義できる?

How can I programmatically generate record definitions?stackoverflow.comこれ、答えはすっと出て朝から回答しようと思ったけど、電車に乗ってる間に先を越されてしょぼんしています。 ただ、僕よりずっといい答えが書かれているのでさくっと書いてみます…

Clojure における幾つかの実践的なデバッグ方法

まえがき だいたい 2 週間くらい Clojure を書いているとライブラリのバグを綺麗に踏み抜いたりマクロの沼に引きずりこまれたりと、まぁやたらとデバッグする機会があります。それで先日からライブラリを clone して書きなおして lein install して…などして…

どうやって lazy なエラトステネスの篩を実装したらいいの?

How to make this sieve function lazy?先日僕も似たような実装しようとしてハマったのを思い出しました。 回答には「本物のエラトステネスの篩 *1」という論文があるので参考にするといいと書いてあります。 また、それについての綺麗な実装もあるので参照…

Clojure で循環参照するような関数定義

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 それそのものをビルドして使う方法です。 Clojure 自身のビルドの仕方 git clone…

Leiningen で自動生成されるライセンスを更新するプラグイン

xsc/lein-licenseちょっと便利。profiles.clj に [lein-license "0.1.2"]を :plugins のとこに追加するだけ。プロジェクトの下で lein license update mit とかすれば自動的にライセンス部分で必要な部分を全部書き換えてくれる。欲を言えば profiles.clj の…

1,000,000 回 assoc! を transient な map に行ったけど、 8 個しか値が入っていないのは何故?

Why inserting 1000 000 values in a transient map in Clojure yields a map with 8 items in it?興味深かった。ベクターに対して同様のことを行った場合は期待通りに動くけど、マップに対してだと動かないという例。 (count (let [m (transient [])] (doti…

Clojure 使いの為の便利なドキュメント集

mbuczko/awesome-clojureだいたいこの辺を読むといいよ!とのこと。 もし何か欠けていたら PR から誰でも追加出来るようです。

Clojure で分割した行の全ての空行を保持したいんだけど…

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…

何故 do ステートメントがグルーピングするのに必要なの?

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) はユニークになるのに、 `(symb#) はユニークにならないのは何故?

(gensym) is always unique, `(symb#) is not -- why?初見だと僕も見事に引っかかった。 (defmacro indirection [name & body] `(do (def name# ~@body) (defn ~name [] name#))) このマクロは一度しか展開されないので、実行する度にいちいち展開されて nam…

Clojure での素因数分解プログラム

Javaでの素因数分解プログラム - 徒然なる情報系日記これ読んでたら Clojure で実装したくなったのでやってみた*1。最終的なコードはこれ。 (ns prime-factorization.core (:gen-class)) (def prime-numbers ((fn f [x] (cons x (lazy-seq (f (first (drop-w…

Web Development with Clojure を読んだ

読みました。結論から言うと、今現時点 (2015/4/12) でもまぁ役に立つ Clojure で Web 開発をするための入門書だと思います。 本の概要 目次 1. Getting Your Feet Wet 2. Clojure Web Stack 3. Liberator Services 4. Database Access 5. Picture Gallery 6…

Cider-debug という視覚的、対話的な Clojure のためのデバッガについて。

デバッグについてです。例えば Ruby 界隈だと pry で、 Java な人たちは高性能 IDE に標準装備されているデバッガあるいはプラグインなどを利用していることでしょう。Clojure も最近はデバッガが cider に標準装備されているようです。ちょっとまだこなれて…

M-x butterfly

Amazing physics going on...xkcd: Real Programmersわろたw

Leiningen の依存性に git のリポジトリを指定する

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…

noir-middleware/app-handler を使って Invalid anti-forgery token でハマるとき

Web Development with Clojure の第 5 章くらいでハマる。このエラーの文言で CSRF だなってことは簡単にわかるんだけど、解決するのに少し悩んだ。 古いバージョン( 0.8.2 当時)の lib-noir だと ring を直接使っていたので、 ring/ring-anti-forgery が依…

Pidgin, IRC, Freenode

Pidgin, IRC, Freenode | Adam MonsenClojure のチャンネルを見たかったので、 Freenode のアカウント取って入った。

Clojure で org.clojure/java.jdbc を使うときにぷちハマりした

Web Development with Clojure を読みながら。 だいたいこの本で使われているライブラリのバージョン古いので最新のものを使って書きながら読み進めているのだけど、見事にハマったよね。こんなエラーが出る。 1. Caused by java.lang.RuntimeException No s…