2014-07-01から1ヶ月間の記事一覧

Clojureで大きな数を扱うときにオーバーフローを防ぐには

桁が大きい数の場合、オーバーフローを防ぐために対数をとるとよい のですが、Clojureの場合どうすば、logが使えるのか疑問におもったので 検索したら見つけました。 Logarithm with base 2 (log2) (defn log2 [n] (/ (Math/log n) (Math/log 2)))

Lazy seq for Pascal’s triangle in Clojure

Lazy seq for Pascal’s triangle in Clojure パスカルの三角形を生成する関数の実装です。 1 1 1 1 2 1 1 3 3 1

4clojure #72 Rearranging Code: ->>

4clojure #72 Rearranging Code: ->> ->>マクロは複数のフォームを経由して式xをつなげる。 はじめに、xは第一フォームに最後として挿入され、 それがすでにリストでなければリストを生成する。 それから、第一フォームは第二フォームへ最後のアイテムとして…

July 2014 London Clojure Dojo at ThoughtWorks

July 2014 London Clojure Dojo at ThoughtWorks ロンドンでClojureの道場をやっているらしいです。人数は10人ほどのようです。

プログラムは書いたとおりに動くのか

プログラムは書いたとおりに動くのか 入力データの仕様と出力データの仕様が決まってからプログラムが書かれるのではなく、 プログラムを書きながら、バージョンアップを重ねながら、 当初見えなかったデータの「かたち」を彫り出して、 思いもかけなかった…

4clojure #71 Rearranging Code: ->

4clojure #71 Rearranging Code: -> -> macroは複数のフォームを経由して式xを通す。 はじめに、xは第一フォームに第二要素として挿入され、 すでにリストでない場合、そのリストを作る。 そして、第一フォームは第二フォームに第二要素として挿入され、 フ…

4clojure #70 Word Sorting

4clojure #70 Word Sorting センテンスを分割してソートした単語リストにする関数を作る。 大文字小文字はソート順に関係なく、句読点も無視すること。 (= (__ "Have a nice day.") ["a" "day" "Have" "nice"]) (= (__ "Clojure is a fun language!") ["a" "…

4clojure #69 Merge with a Function

4clojure #69 Merge with a Function 関数fといくつかのマップを引数に取る関数を作る。 その関数は、一番目のマップにconjしたマップの残りから構成されたマップを返す。 複数のマップにひとつのキーがあるとき、後ろからのマッピングは(f 結果の値 後の値)…

Clojreの入門書

Clojreの入門書です。PDFやepub、mobi形式などの本を購入することもできます。 とても丁寧でよいかもです。 Clojure for the Brave and True ( a Book for Beginners )

4clojure #67 Prime Numbers

4clojure #67 Prime Numbers 最初のx個の素数を返す関数を作る。 (= (__ 2) [2 3]) (= (__ 5) [2 3 5 7 11]) (= (last (__ 100)) 541) はじめは、reduceのClojureDocをみて、素数列をつくろうとしましたが、 うまくいかなかったので、prime?を作ってみました…

4clojure #66 Greatest Common Divisor

4clojure #66 Greatest Common Divisor 最大公約数を求める関数を作る。 (= (__ 2 4) 2) (= (__ 10 5) 5) (= (__ 5 7) 1) (= (__ 1023 858) 33) a、bの最大公約数とは、aでもbでも割り切れる数のうちの最大値だから ((fn my-gcd [a b] (let [m (max a b)] (l…

4clojure #65 Black Box Testing

4clojure #65 Black Box Testing シーケンスの種類(:map :set :list :vector)を答える。 ポイントはそれらを調べ、動作を理解することです。 ただし、以下は使用禁止。 class type Class vector? sequential? list? seq? map? set? instance? getClass (= :m…

4clojure #63 Group a Sequence

4clojure #63 Group a Sequence 関数fとシーケンスsを与えてマップを返す関数を作る。 キーはsの各項にfをapplyした値です。 各キーに対応する値はsの順番で連続する項の続くベクターです。 ※ group-byは使用禁止。 (= (__ #(> % 5) [1 3 6 8]) {false [1 3]…

Adam Bardさん特選記事

My Top Clojure Articles Adam Bardさんが書いたブログ記事のなかから、特選記事をまとめたものです。

4clojure #62 Re-implement Iterate

4clojure #62 Re-implement Iterate 関数fと初期値xをとり、 無限な遅延シーケンスx, (f x), (f (f x)), (f (f (f x)))...を返す関数を作る。 ※ iterateは使用禁止。 (= (take 5 (__ #(* 2 %) 1)) [1 2 4 8 16]) (= (take 100 (__ inc 0)) (take 100 (range)…

4clojure #61 Map Construction

4clojure #61 Map Construction ベクタのkeysとvaluesをとり、それらからマップを生成する関数を作る。 ※ zipmapは使用禁止。 (= (__ [:a :b :c] [1 2 3]) {:a 1, :b 2, :c 3}) (= (__ [1 2 3 4] ["one" "two" "three"]) {1 "one", 2 "two", 3 "three"}) (= …

4clojure #60 Sequence Reductions

4clojure #60 Sequence Reductions reduceのような動きをする関数を書く。 ただし、縮小する各中間の値を返すこと。 2か3引数をとり、遅延シーケンスを返すこと。 ※ reductions使用禁止 reductionsを使えばそのまま解決できました。 (= (take 5 (__ + (ran…

4clojure #59 Juxtaposition

4clojure #59 Juxtaposition 一連の関数(1)を引数(funcs)にとり、新しい関数(2)を返す関数(3)を作る。 関数(2)は引数(args)を、一連の関数(1orfuncs)へ左から右へ apply した 結果をふくむ seq を返す。 ※ juxt 使用禁止。 (= [21 6 1] ((__ + max min) 2 3 …

4clojure #58 Function Composition

4clojure #58 Function Composition 関数を組み立てる関数を求める。 パラメーターリストは複数の関数で、求める関数は、それらを右から左にapplyさせます。 ※ compは使用禁止。 (= [3 2 1] ((__ rest reverse) [1 2 3 4])) (= 5 ((__ (partial + 3) second)…

4clojure #53 Longest Increasing Sub-Seq

#53 Longest Increasing Sub-Seq (= (__ [1 0 1 2 3 0 4 5]) [0 1 2 3]) (= (__ [5 6 1 3 2 7]) [5 6]) (= (__ [2 3 3 4 5]) [3 4 5]) (= (__ [7 6 5 4]) []) 難しい。seqのなかで、1ずつ増加している箇所で、最長のものを求める。 シーケンス機能を利用して…

DIY NoSQL part deux: interchangeable parts

DIY NoSQL part deux: interchangeable parts Clojureでtwitter風webアプリ制作を例にして、プロトコルを使うアイディアの記事です。 参考サイトですでにtwitter風webアプリはつくってありますが、その実装には問題があるとして第2弾の記事になっています。…