日曜プログラミング

休日趣味でやってるプログラミング関連記事をダラダラと

2013-01-01から1年間の記事一覧

Light Table

Chris Granger - Light Table - a new IDE concept密かに注目してるんだけど、どうも作り直してるらしくリンク先の動画にある docstring をそのまま表示する機能とかは現時点じゃ未実装みたい。けど python 対応もするっぽくてこれきっちり対応したら爆発的…

継続がない理由

いや、継続自体理解してないんですがね。 The Joy of Clojure を読んでたら思いもかけず CPS の項目があったもんで改めて調べてみた。今まで継続を解説してたサイトや本や記事読んでもイマイチその有用性が理解できなくて。 以前日本語で理解できかったから…

数字を各桁に分解(10進数限定)

How do you extract digits from an integer in java? - Yahoo! Answers を見て なるほどど思い早速 Clojure で書いてみる。 (defn digits [n] (letfn [(digits-internal [n] (when-not (zero? n) (cons (mod n 10) (digits-internal (quot n 10)))))] (reve…

->, ->>, as->, comp

どれも似たような機能なのでどう使い分けようかと言うメモ。 一般的な表現かどうかは分からないが自分の頭の中では結果チェインと呼んでる。 comp は名前の通り関数合成(comp[osition])と呼んだ方がいいんだろうけど。 -> 正直 ->> でほぼ事足りてあまり出番…

p.142 での pow

p.142 で出てくる再帰版の pow だけど、機能を実現するだけならこうも書けるよな (defn pow [base exp] (reduce * (repeat exp base))) 短いコードは正義。ちなみにでっかい数を渡した時の結果について。 user> (pow 2 10000) ArithmeticException integer o…

末尾再帰とループ

正直好みの問題な気もするが自分が思う所の利点。 末尾再帰 ループ変数不要と言うか再帰関数の引数化して関連付けが明確になる 関数として定義し易い*1 良く良く見れば再帰関数呼び出しは goto のラベルと同じだったり この辺りに利点を感じられないなら別に…

大きなファイルを扱うお話

練習がてらちょっとしたツールでも作ってみようかとした場合、大きなファイルを読み込んで java.lang.OutOfMemoryError 起きて困ったりした事がちょこちょこあるのでどうするのが良いか 改めて調べてみた。以前 java.lang.OutOfMemoryError が出た時は、読み…

Excel の制限で書式は 4000 までしか指定できない

Clojure+docjure を使って 7000 行くらいのデータを Excel に書きだそうとしたら以下の例外が出た。 Exception in thread "main" java.lang.IllegalStateException: The maximum number of cell styles was exceeded. You can define up to 4000 styles in a…

comp への思い込み解消

compって関数結合順で考えてたら書く順序逆じゃねと勝手に思ってて使う時も微妙に引っかかっていたんだが、comp使わない書き方に変えてみると、要は見た目順なのに最近気づいたwClojureDocs のサンプルから。 user> (filter (comp not zero?) [0 1 0 2 0 3 0…

lazy-seq の 4 つのルール, 後 next と rest の違いとか

Joy of Clojure P115 にあったのをメモ。 プログラミングClojureにもあったと思うが結構忘れがちなので。訳は適当。 遅延シーケンスが発生し得る式の上で lazy-seq マクロを使う もし処理中に別のシーケンスが発生するなら next の代わりに rest を使う シー…

Excel 列名への変換

ググると割と巷にコードサンプルが見つかるものの Clojure は見つからなかったので作ってみた。 (defn num->col-name [n] "1以上の数値からExcelの列名表記に変換する" (letfn [(charseq [x] (when (pos? x) (cons (mod (dec x) 26) (charseq (quot (dec x) …

いかん、飽きた

ここまで書いてみた後何か急に冷めた。また目移りしてるけどいいや。

interleave と zipmap の使い分け

どちらもイメージ的に間に挟み込むと言う結果では似てはいるなとふと思った。 user> (zipmap [:a :b] [1 2]) {:b 2, :a 1} user> (interleave [:a :b] [1 2]) (:a 1 :b 2) つか zipmap ってこうか (apply merge (map (partial assoc {}) [:a :b] [1 2])) ソ…

tree widget 断念

seesaw の simple-tree-model を試そうと 2ch の板一覧を引っ張ってきて ちょっとゴニョゴニョしてネストした ArrayMap に落とし込んだ所まではいい んだけど、じゃそいつを seesaw の tree Widget に表示させてみようかとし た所で simple-tree-model 内部…

1.5 の clojure.core.reducers って速くなっただけ?

github の changes.md を最初チラ読みした時は Java7 の fork/join フレームワーク使って 裏で並行処理化するようになって早くなったよ、ってくらいしか目に付かなくて、 元々マルチコアでの並列処理にはそこまで興味なかったんでふーんとしか思ってなかった…

変数をいつ破棄するか

Clojure と言うよりプログラム一般の話で Lisp やろうがやるまいが今更な話な気もするけど。lisp 界隈では変数は基本関数内に収まってて関数内で一時変数使いたい時なんかも let や そこから派生する with- 系マクロを使うのが普通みたい。これってプログラ…

-> と ->> の違い

ClojureDocs 見比べてやっと違いが分かった。 -> は引数 1 個しかない関数をチェインしたい時に使う ->> は引数が 2 個以上ある関数をチェインしたい時に使う(但し渡るのは引数の最後) 引数が真ん中に来るようなチェインは諦めた方がいいんだろうけど 2 番目…

プログラミング Clojure 6.6 スネークゲーム を seesaw で作る(2)

昨日の続き。GUI 部分もう少し触ろうかと思ったけど、Model 部分が思ったより理解できて なかったのでそちらから。 Lancet の部分読み飛ばしまくってるせいかなあ。 関数モデルの部分何か難しくないすか? vector のインデックス指定 まずは point-to-screen…

プログラミング Clojure 6.6 スネークゲーム を seesaw で作る(1)

ここはまんま写経するのも面白くないし、実際の使い勝手を知りたいと言う面から Clojure の Swing ライブラリである seesaw 使って書いてみようと思う。 Seesaw のサンプルを取ってくる とは言っても Seesaw は前に brief-tutorial をちょろっと触ってみただ…

プログラミング Clojure p150 について

ここで相互再帰の解決手法で trampoline が紹介されてたので試してみる。 Clojure は 1.4 のお話。 (trampoline trampoline-fibo 9) -> 34 ここまではいいのだが、 (rem (trampoline trampoline-fibo 1000000) 1000) -> ArithmeticException integer overflo…

プログラミング Clojure p145 でのちょっとした疑問

環境構築も終わってちまちまと読み進めてるが、p145 での count-head-pairs の作り方にちょっとした疑問があるのでグチ。count-head-pairs を作るベースに count-runs を作る所まではかなり参考になるんだが、count-head-pairsでcount-runs呼び出すなら、 (f…

プロセスが残るんですけど

Windows+Emacs+Clojure+nREPL でプログラミング Clojure のサンプルコードポチポチ打って試してたら間違って無限ループ入ってクッソ重くなった。ここまでは自分が悪いからいいんだけど、プロセス殺そうとタスクマネージャ見てみたら java.exe が何個も立ち上…

良いLispプログラミングスタイル

2ch で紹介されてたので後で読んでみる。 Tutorial on Good Lisp Programming Style (日本語訳) そういや lisp 界隈で今までこういうの読んだ事なかった。 ソース見てればなんとなーく作法は見えてくるんだけどね。 読後の感想は後ほど。

ファイル入出力

Lisp 系の常なのか、ファイル入出力系の情報があまり見当たらずちょっと探したが自分が欲しかったカレントディレクトリの取得方法を見つけたのでメモ。 In Clojure 1.3, How to read and write a file - Stack Overflow てか Java のプロパティ(?)とやらを読…

Windows+Emacs+nrepl.el で nREPL を試してみた時のメモ

はいこんばんわ。 Emacsを使いたかったのもそもそもnREPLを使ってみたかったからで、ここでも軽くハマったのでメモ。 Emacs で nREPL 使うには leiningen のプロジェクトファイルに宣言して nrepl.el を入れて設定って step があるけどここでは割愛。 結論か…

el-getインストール

こんにちわ。趣味でやってる休日プログラミングを忘備録的に書いていこうと思ってます。早速本題、el-get とは。Emacs のパッケージ管理システムの一つ。24 系だと標準で package.el が付いているんだがこれにはどうやらアップデートと言う概念はなく、バー…