日曜プログラミング

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

2013-04-01から1ヶ月間の記事一覧

マップにキーワードが無い時

キーワード使った検索って見つからない時のデフォルト値も指定できたのね。 user> (:a {:a 2}) 2 user> (:a {:b 3} 4) 4 clojure.core - Clojure v1.5 API documentation 上の get と同じ事らしい。

目次っぽいものを集める

PowerPoint で 100P 以上作成された資料があって更新する必要が出てきて、目次を手でズラして 更新するのは余りにもバカバカしいんでどうにかできんかちょっと調べてみた。以前は UWSC 使ってたんだが単純な操作記録の繰り返しだとマウス座標やオブジェクト…

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) …