CLOVER🍀

That was when it all began.

Clojure

Leiningenことはじめ

そろそろ、Clojureでもビルド・依存関係管理ツールを触ってみようかと思います。Clojure界隈ですと、間違いなくLeiningenが候補となるので例に漏れずこちらで。 Leiningenとは? Clojureでのビルド・依存関係管理ツールで、プラグインなども豊富にあるようで…

Scala/Clojure/Groovyで即時関数

あまり意味のない小ネタです。JavaScriptで使われるテクニックとして、即時関数というものがあると思います。こういうやつですね。 immediate_func.js (function (firstName, lastName) { println("Hello! [" + firstName + " " + lastName + "]"); })("Taro…

Clojureの->マクロと->>マクロ

今回もきっかけは「実践プログラミングDSL」からだったりしますが、ClojureDocsとかでもたまに見かけて気になっていた表現があります。Clojureのこれ -> とこれ ->> です。何だろ?と思っていたのですが、書籍にも出てきたので調べてみることにしました。 ->…

Clojureでコードのロード系関数+evalを扱う

少し前にこういうエントリを書きました。その後、元にしたブログのエントリを見ていると、evalとかそういう方向に流れていて、この時に自分が取った方法は随分と遠回りだったことがわかりました。つか、evalの発想がなかった…。まだまだ考え方は静的言語って…

Clojureの条件分岐を覚える

ifとかwhenとかcaseとかいろいろあって、いつも迷うので1度しっかり見てみることにしました。代表的そうなものを、以下順に。 if 最も単純な条件分岐です。最初に条件式を書き、次に条件がtrueとなった場合の処理、その次にelseの処理を書きます。戻り値は、…

Clojureの関数を、文字列での名前から動的に呼び出す

面白そうなチャレンジを見つけたので、別のアプローチでやってみることにしました。 *記事を執筆後、ちょっと書き直しました http://npnl.hatenablog.jp/entry/2012/06/02/150513元の記事は、文字列からシンボルを作って、それを評価しようとして四苦八苦さ…

Clojure(とScalaとGroovy)でEcho Serverを書く

Clojureの入出力系の関数を一通り目を通した(と思っている)ので、ちゃんとアプリっぽいものを書いてみようとClojureでEcho Serverを書くことにチャレンジしてみました。今回のEcho Serverの動作は、以下の通りです。 起動引数にポート番号、またはホスト名…

Clojureで入出力を扱う(clojure.java.io)

今回は、Clojureの入出力系の関数の中でも、比較的プリミティブなclojure.java.io名前空間の関数を扱ってみたいと思います。 file java.io.Fileを作成する関数です。 (use '[clojure.java.io :only (file)]) (println (class (file "clj_java_io.clj"))) ;; …

Clojureで正規表現

土日とゴールデンウィークが仕事ばっかりで、全然更新できていませんでしたね…。なんとか時間が作れたので、久々の更新です。前回のScalaの正規表現に続き、Clojureの正規表現を使ってみようと思います。Contribは見ずに、標準関数のみです。 re-pattern(ja…

Clojureで入出力を扱う(clojure.core)

Clojureのcoreライブラリの中でも、日常で比較的使いそうなIO系の関数をちょっと調べてみました。 read-line 標準入力から1行読み込みます。以下、サンプル。 (print "type keyword => ") (flush) (def line (read-line)) (print (str "Your typed => " line…

Groovy、Clojureでもっと関数合成(オマケでScala)

珍しくトラックバックなどいただいたので、もうちょっとこのネタを書いてみることにしました。関数合成して何が嬉しいのか…ですが、前の例みたいな足し算、掛け算なんか書いても、確かにあんまりまあ現実味ないですからねぇ。それに、こういう単純なメソッド…

Clojureで特定のパッケージ配下のクラスを検索する

なんとなく始めてみた、同じテーマでのリライトシリーズ第3弾、最後はClojureです。Javaから始めてScala、Groovyと続きましたが、Clojureが1番苦労しました…。イミュータブルなデータ構造を基本にプログラミングすることに慣れていないということを、嫌とい…

Groovy、Scala、Clojureで関数合成

あまり使ったことがないので、メモを兼ねて試してみます。 Groovy Groovyの場合は、Closureクラスのインスタンスを合成します。使用するメソッドは、leftShift(>)です。 def add2 = { x -> x + 2 } def multiply3 = { x -> x * 3 } def multiply3AndAdd2 =…

Clojure 1.3.0インストール

久々に、Clojureを触ってみたくなりまして。1.1、1.2の頃は触っていたのですが、このところ全然だったので、Clojure 1.3.0をインストールすることにしました。とりあえずスクリプト的に使うことをメインにするので、Leiningenはいったん置いておきます。まず…