(define -ayalog '())

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

Clojure

関数リストを適用する方法

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 に標準装備されているようです。ちょっとまだこなれて…

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…

もらったもの

これで「なんかください」って書いてたらおふたりから頂いてしまった。ありがとうございますm(__)m@finalfusionさんからClojure Cookbook: Recipes for Functional Programming作者: Luke Vanderhart,Ryan Neufeld出版社/メーカー: Oreilly & Associates Inc…

The Clojure Style Guide を読んだ

bbatsov/clojure-style-guide bbatsov/clojure-style-guide · GitHubtotakke/clojure-style-guide totakke/clojure-style-guide · GitHubこういうスタイルガイドは言語の勉強するときに役に立つので大変ありがたい。 その言語の抱えている問題/特徴なんかが…

Clojure で kuromoji 使ってみた。

さてはて、 Clojure の勉強がてら何かしら面白いものないかなーと思い、形態素解析ライブラリでも使うかーということで使ってみた。適当に project 作って依存性解決して (defproject kuromoji-test "0.1.0-SNAPSHOT" :description "FIXME: write descriptio…

はじめての Clojure を読んだ

とりあえず、読んだけど…ってところです。 良かったとこ 怖くない 薄い 軽い とりあえず Web アプリ作れる 良くないとこ 浅い 説明不足感ある 誤字脱字が気になる 感想 正直、好みの問題で話すと好きじゃないです。分配束縛の話のとことか、それで理解出来る…

ゆるふわ Rails の会という勉強会にいって、コワーキングスペース HaLake で遊んできた

ゆるふわRailsの会 #0 レイクタウンでRailsやろうよ - ゆるふわRailsの会 | Doorkeeperというわけで遠路はるばる埼玉まで行ってきました。 HaLake はニャンパス株式会社の運営しているコワーキングスペースです。ニャンパスと言えばのんのんびより、もとい C…

Clojure の Var に関して覚書

なんか面倒くさい。 Clojure Programming 読んでていきなり Chapter1 とかでチラッと出てくるんだけど、一緒に Clojure 勉強しているスクラムマスターが混乱したくらいには面倒くさいというか。面倒くさい。事の発端はこれ昨日スクラムマスターが 「Clojure …