2014-01-01から1年間の記事一覧
14.1 関数の構築 関数合成をマクロ化する意味が結局良く分からない。 funcall を暗に呼んでいて省略できるのがメリットくらい?それにしてもまだ呼び方が (fn (compose list 1+ truncate)) と、Clojure の comp を知っていると使う側が fn を改めて呼ぶ必要…
13.1 アナフォリックな変種オペレータ p116 aif を初めとした図 72 ひと通り。 (defmacro aif [test-form then-form & [else-form]] `(let [~'it ~test-form] (if ~'it ~then-form ~else-form))) (defmacro awhen [test-form & body] `(aif ~test-form (do ~…
GitHub へ API doc を deploy する方法としては既に codox の HowTo としてもあるんだが、ここではもう少し手抜きな方法をメモしておく。GitHub Pages となるリポジトリは既に作っているものとする。 lein doc してできた doc フォルダを普通に git commit&p…
cider が 0.8.1 になってた のでアップデートしようとしたが割と手間取ったのでその手順をメモしておく。 今回は 0.7.0 の時と違い単なるインストール記事で使用感までは書いてない。 個人的に色々気になるのはあるけども今回は 元Changelog。 を見てもらう…
久しぶりの更新。小ネタだけど。 Clojure で日本語 Keyword は避けた方が良さそう。 :あとか:いとか単純なものだと普通に使えるんだけど アルファベットや漢字と混合したものだと関数のプロセスによっちゃ キーはあるのに値が取れない事がある。 取れなかっ…
複数のシーケンスを対象に先頭からそれぞれ要素を取って処理したい時どうするか。 map が順当なんだけど渡す処理がごく簡単な場合ならまだしも ちょっと複雑になってくると少し見辛くなる。 例えばこんなの。 (map (fn [avar bvar cvar] (->> (foo-fn avar) …
Clojure で lazy-seq を生む関数と言うのは cheatsheetの Creating a Lazy Seq に書かれている関数の他に も良く使う所では map 関数なんかもそうだったりする。Programming Clojure を読んだ事があれば 何となく記憶してるかもしれない。 REPL で確かめてみ…
Clojure では名前空間を切る時、通常は名前空間名と.cljを除いたファイル名を同じにするよう構成する事になっている。 また、名前空間をドットで区切るのはパス区切りと対応付けられる。 名前空間が foo.bar だったら foo\bar.clj となる。 一方、lisp での…
[2014-07-22 追記] table 別名がデフォルトで AS なしに修正された事を示すリンクを追記 Clojure 界隈では、SQL DSL の選択肢が結構前からいくつか存在する。初期からある Korma や HoneySQL そして今は Clojure で JDBC ラッパーのデファクトスタンダートと…
Clojure でコード書いてる時、^:private な変数や関数で 行数が増えてくるとこれってどこで使ってたっけ?と思う事が増えてきた。 原始的な検索や、タグジャンプでまあ分からん事もないんだけど 行数が増えてくるとそれすらも億劫になってくる。 良く書くパ…
codox、作ったツールの関数群を俯瞰するのには 十分使えるものだと思ってる。もう少しこなれてくれば提出用にしてもいいんじゃないかってくらい。 が、その場合割と致命的に困る事があり、一部 ns で何故かドキュメント出力されない事がある。 AOT コンパイ…
外部ライブラリを色々使い出して最近ふつふつ思うのが、どーも高階関数が絡んだ時の説明がイマイ チな事がチラホラあるような。ここで言ってるのはさすがに今更高階関数そのものの説明してくれと 言ってるわけではなく、API として説明不足と言うか。個人的…
ここでも一応書いておくが、前の 11 章はベースになる setf に該当するものが Clojure には見当たらないので章全体を飛ばしている。 また、この章のサンプル移植は most-of しかなく、殆ど無いも同然なので ここも飛ばしてもらっても構わない。 12.1 新しい…
10.4 反復 p96 (defmacro forever [& body] `(loop [] ~@body (recur))) 図 53 単純な反復用マクロ.while, for は既出なので till のみ。 Clojure の loop には go や return はないが、条件分岐と recur を組み合わせたら マクロ定義時だけは同様の事が可…
cider なんだがどうやら GW 前に 0.6.0 リリースがリリースされてた模様。 そこで REPL 上で 0.6.0alpha と表示されてた cider を 0.7.0-SNAPSHOT へ更新した。 更新は el-get で Github master から remove -> install と実行し、 後 leiningen プラグイン…
この辺りから段々と変態じみてくるw 10.1 コンテキストの生成 p90 図 47 let のマクロによる実装。 binds の奇数 index はローカル変数のシンボルなので、それを関数の仮引数として渡し、body を実行。 で、binds の偶数 index を関数の実引数として後半部で…
9.1 評価の回数 p84 On Lisp で言う複数回の評価を起こし得るマクロが Clojure 版にあるかどうか 良く分からん。形式的に近いのとなると for-b なんだが、 (defmacro for-b [[sym start stop] & body] `(loop [~sym ~start] (when (<= ~sym ~stop) ~@body (r…
8.1 マクロ引数の捕捉 p75 ここで挙げられている for はリスト内包表記な Clojure の for でなく、 命令プログラミング的な for をマクロ実装してみたもの。 Clojure でサンプルを素直に読み替えて定義してみた場合だと実際は使えない。 (defmacro for-a [[s…
6.9 マクロへの依存 p66 Clojure も事情は同じと考えていいのかな。 (defmacro mac [x] `(inc ~x)) ;=> #'user/mac (def f (fn [y] (mac y))) ;=> #'user/f (defmacro mac [x] `(+ ~x 100)) ;=> #'user/mac (f 1) ;=> 2 6.10 関数からマクロへ p67 ここでは …
6.4 マクロ展開の確認 p60 図 33 マクロ展開確認用のマクロ (defmacro mac [expr] `(clojure.pprint/pprint (macroexpand-1 '~expr))) cider なら C-c C-m すればいいんだが一応。 6.5 引数リストの構造化代入 p61 最初サンプルほぼそのまま書いてみたのだが…
6 マクロ 6.1 マクロはどのように動作するか p54 (defmacro nil! [x] (list 'def x nil)) 6.2 逆クォート そのままバッククォートと言われたりもする。 一応補足すると、Common Lisp でのバッククォート中のカンマは Clojure では ~ に相当する。 同様に Com…
まえおきのまえおき ここは On Lisp -> Clojure へ移植記事シリーズのエントリポイントとして書いてます。 なので目次は中身が更新され次第合わせて更新します。 意思表明的な意味を込めてまえおきも置いてますがんなもんどうでもいいよと言う人は まえおき…
JavaFX に限らず、一言に Drag and Drop と言っても、Source と Target が何か、Target の扱いを どうするかで話は大分変わるんじゃないかなと思いつつ、まずは日本語リソースをググってみるがサッとは見当たらない。 この記事の続き には書かれてるかもしれ…
ちょっと気分を変えてブログテーマをこちらに変えてみた。 Separate - テーマ ストア - はてなブログ はてなユーザ ID なしで見えるのかな。 まあリンク先には飛べなくとも変わりましたと言うことで。 サイドバーがデフォルト隠れているのが気に入ったので選…
いやあ、ハマりにハマりまくったが何とか解決できたので整理する。 前に JavaFX の Binding ってあまり使う事ないかも とか言ったけど撤回します。その後調べてると Low-Level Binding とも組み合わせたら割とやりた い放題、と言うか異なる型同士の Propert…
祝 Clojure1.6 正式リリース 個人的に目を引くような変更点 はあんまりないんだが、1.5 から使い勝手は変わらずに不具合修正もいくらかされているみたいので、既に 遭遇してる人はもちろんの事、この先要らん地雷を踏みたくない人もアップデートかけた方が良…
leiningen プロジェクトで作ったプログラムの配布について。 ライブラリであれば標準で lein deploy が用意されてるが(使った事ないけど)、スタンドアロンア プリとして本体の jar の他にマニュアルなどのドキュメントを jar には含めずに 書庫ファイ ルに固…
この記事はレジストリを直接いじる事になります。レジストリの編集先は示しますがレジストリ自体 の編集方法についてはここでは書きません。 以前 コマンドプロンプトの表示領域を変更する記事 を書いたが、今回もう一つやりたかったデフォルトフォントの変…
doc 見れば書いてはいるんだが試した事はなかったので試してみた。 Clojure deftype that has mutable field and setter ...
とあるオレオレライブラリの管理をする時、ソースファイルとしてはある程度機能別に分けたいのだが、 そのライブラリを使うとなった時にはあまり require, use で指定する名前空間は増やしたくない。 そう言う時どうすりゃいいんだろと少しググって見たら、C…