タグ

ブックマーク / tnoda-clojure.tumblr.com (7)

  • 「Clojure への不満とか」読後の所感 - tnoda-clojure

    @halcat0x15a が書いた Clojure への不満とか というエントリを読みました. この手の不満は単なる愚痴に終わってしまうことが多いのですが, Haskell/Scala プログラマから見た Clojure という明確な視点があるおかげで, 単なる愚痴を越えてプログラミング言語間の比較をするきっかけになっています. 私も読んでいて,Scala のように Clojure を書きたいと考えたら, 同じことを思ってしまうだろうなと.なるほどと膝を打ってしまいました. ところで, 人が抱く不満というのは百人いれば百通り違うわけで, Haskell/Scala プログラマという背景が変われば不満も変わってくるわけです. 「改善された Java」として Clojure を使っている私が読むと, Scala プログラマの不満も別の意味をもってきます. そこで,このエントリでは,@halca

    「Clojure への不満とか」読後の所感 - tnoda-clojure
    fumokmm
    fumokmm 2012/10/07
    あとで読む。
  • a[i][j] を (a i j) と書きたい. - tnoda-clojure

    definline を使って Clojure でも配列を Java のように簡潔に扱えるようにします. 関数のような配列Clojure で配列を操作するコードは たとえば,二次元配列にアクセスする場合,Java なら a[i][j] で済むところが Clojure だと: (aget ^longs (aget ^objects a i) j) となります.Java と比べて長く,さらに読みにくいです. ここで,Clojure のコレクションが関数であることを思い出しましょう. たとえば,ベクタなら: user> (def v [1 2 3 4]) #'user/v user> (v 3) 4 のように,インデックスをキーとして要素にアクセスすることができます. これを配列にも適用して, Java の a[i][j] を (a i j) と書けるようにしましょうというのがこの記事の趣旨です.

    a[i][j] を (a i j) と書きたい. - tnoda-clojure
  • JSON の代わりに Clojure のコレクションリテラルを使おう. - tnoda-clojure

    Clojurian なら JSON の代わりに速くて便利な Clojure のリテラルを使いましょう. データ表現としての Clojure リテラル長大バッチ処理の途中など,中間結果を外部ファイルに保存しておきたいという場面は結構あります. 単純なデータ構造なら CSV なり TSV なりで保存可能ですが, ベクタのベクタのマップとかマップのベクタのマップのベクタとかといった複雑な構造を保存するには非力です. そこで,古くは XML のようなマークアップ言語を使ったり, 最近では軽く JSON を使ったりすることになります. しかし,ファイルを読み書きするのが Clojure プログラムだけなら, JSON の代わりに Clojure のコレクションリテラルを使うのが速くて便利です. 組み込みのインポート/エクスポート機能clojure.core の pr-str を使うと, Clojur

    JSON の代わりに Clojure のコレクションリテラルを使おう. - tnoda-clojure
    fumokmm
    fumokmm 2012/08/08
    いいね。
  • Clojure すごい Haskell たのしく学ぼう! (1) はじめの一歩 - tnoda-clojure

    関数プログラミングについては良い教科書がたくさん出ていますが, 残念ながら OCaml か Haskell で書かれたものが目につくばかりで, Clojure でサンプルコードが示されたものを私は見たことがありません. 関数プログラミングを勉強しようと思うと, これらどちらかのプログラミング言語を修得しないといけなくなるわけですが, ちょうど, すごい Haskell たのしく学ぼう が発売されたので,Haskell を勉強してみることにします. ただし,を買うお金が無いのでオリジナル Web サイト, Learn You a Haskell for Great Good! を読みすすめることにします. 訳は見たことがないのですが,きっと,どちらを読んでも同じでしょう. このシリーズでは,Miran Lipovača 著 Learn You a Haskell for Great Go

    Clojure すごい Haskell たのしく学ぼう! (1) はじめの一歩 - tnoda-clojure
  • clojure.test: 普段づかいの Clojure プログラムをちょっとテスト. - tnoda-clojure

  • スタックとキュー - tnoda-clojure

    Clojure プログラミングにおけるスタック (stack) とキュー (queue) について解説します Clojure におけるスタックとキューClojure ではベクタをスタックとして扱えることを知っている人は多いと思います. 一方で, キューが Clojure に組み込まれていることに気づいている人は少ないのではないでしょうか. まず,簡単なほうのスタックについておさらいしたあとで, キューが Clojure のどこに隠れているのかを示します. Clojure ではベクタをスタックのように扱うことができます. push/pop/peek の三つの操作に対応する関数はそれぞれ, push => conjpop => poppeek => peekです.conj を push 代わりに使うのがポイントです. 以下,サンプルプログラム: user> (defn println-peek

    スタックとキュー - tnoda-clojure
    fumokmm
    fumokmm 2012/07/06
    スタックとキュー
  • スクリプト言語としての Clojure - tnoda-clojure

    普段 Clojure でプログラミングしていても, スクリプト言語としてはシェルスクリプトを使っていたり Python/Ruby を使っていたりしませんか. この記事では,実行可能な .clj ファイルをつくり Clojure をスクリプト言語のように使う方法を解説します. ちなみに,名前が似ている ClojureScript は Clojure -> JS コンパイラなので, スクリプト言語とは何の関係もありません. 実行可能な .clj ファイルの書き方.Clojure 自体はインタプリタではなく Java のライブラリです. そのため,Clojure プログラムを実行するときには java コマンドを利用して, % java -cp ~/clojure.jar clojure.main hello-world.clj Hello World. のように実行します.しかし,java

    スクリプト言語としての Clojure - tnoda-clojure
  • 1