clojure

よりClojureらしく線形合同法を使った乱数列を計算する

Clojure入門がてらに「初心者用課題」を解いてみる - 蟲!虫!蟲! - #!/usr/bin/bugrammerの第四問を解いて、解説を加えたものです。前回(よりClojureらしく閏年を探す - OGINO Masanori@はてな)を踏まえた説明なので、前回を読んでいない方はそちらを先…

よりClojureらしく閏年を探す

Clojure入門がてらに「初心者用課題」を解いてみる - 蟲!虫!蟲! - #!/usr/bin/bugrammerの第二問を解いて、解説を加えたものです。前回(よりClojureらしい素数列 - OGINO Masanori@はてな)を踏まえた説明なので、前回を読んでいない方はそちらを先に読…

よりClojureらしい素数列

私は一昨日から2011-09-24 - 蟲!虫!蟲! - #!/usr/bin/bugrammerの補足を書いていましたが、分量が多すぎるので後日分割することにしました。そこで、代わりに2011-09-27 - 蟲!虫!蟲! - #!/usr/bin/bugrammerの問題を解いて解説をつけたものを先に公開…

メタデータのこれまでとこれから

最初に謝らなければならないことがあります。ごめんなさい。私が間違っていました。耳当てつきのvarはダイナミックスコープを持つと自動的にみなされない - OGINO Masanori@はてなで、:dynamicメタデータの値をtrueにするために、このように書きました。 (de…

耳当てつきのvarはダイナミックスコープを持つと自動的にみなされない

これはClojure 1.3.0のchanges.txtの1.1の日本語訳と解説です。 日本語訳 (def *fred*) => Warning: *fred* not declared dynamic and thus is not dynamically rebindable, but its name suggests otherwise. Please either indicate ^:dynamic *fred* or c…

関心の分離

これはMeikel Brandmeyer([twitter:@kotarak])の文章、"Separation of Concerns"の日本語訳です。「最近の知恵」曰わく、プロトコル*1関数は低レベルのインターフェースにするべし。無論、僕は無知ゆえにこの言葉に従わなかった。幸いにもChristophe*2はい…

NullPointerExceptionに遭うコード

最近悩んでる問題。 (import '[javax.media.opengl GLCapabilities GLProfile] '[com.jogamp.newt.event WindowAdapter] '[com.jogamp.newt.opengl GLWindow] '[com.jogamp.opengl.util FPSAnimator]) (def window (-> (GLProfile/getDefault) (GLCapabiliti…

rand-strを添削してみる

オリジナル:https://bitbucket.org/fgtrjhyu/misc/src/5d4fa9455ed0/randomstring/clj (use '[clojure.string :only (join)]) (defn- char-range [& more] (letfn [(crange [[^Character start ^Character end]] (join (map char (range (int start) (inc (…

char-range

(defn- char-range* [start end] (map char (range (int start) (inc (int end))))) (defn char-range [& more] (if (and (= (count more) 2) (every? char? more)) (apply char-range* more) (apply concat (map #(apply char-range* %) more)))) (comment …

Clojureで事前条件・事後条件

(defn sqrt [n] {:pre [(>= n 0)] :post [(>= % 0)]} (Math/sqrt n))

ClojureでBase64

http://gist.github.com/301008 にClojureで書かれたBase64ライブラリを置きました。使い方は読めばわかるはず。(おい) *encode-table*を書き換えることでURLセーフな変種にも対応できるようになっています。文字列操作と正規表現を湯水のように使い捨ててい…

ClojureとCommon Lispのcondの話

Common LispとClojureではcondの書式がちょっと違う。Common Lispだと、 (cond ((test) (expr)) ((test) (expr))) Clojureだと、 (cond (test) (expr) (test) (expr)) で、Clojureだとtestとexprの間に改行入れたら読みにくい、という話。こんな感じ。 (cond…