タグ

ブックマーク / minazoko.hatenadiary.org (6)

  • require と use - 水底で思うこと

    Clojureで書かれた外部コードを参照する時、require や use を使います。ちょっとまとめてみました。使用しているClojureは 1.2.0-master-SNAPSHOTです。 require と use の違い 例えば、clojure.pprint 名前空間に定義されている、pprint という関数を使う場合。(clojure-version は組み込みのグローバル変数です)。 ;; カレント名前空間に clojure.pprint (clojure1.1では clojure.contrib.pprint) ;; で定義されている関数や変数を導入 (use 'clojure.pprint) (pprint *clojure-version*) ;; clojure.pprint 名前空間を指定してモジュールを読み込む (require 'clojure.pprint) (

    require と use - 水底で思うこと
  • Clojureのコマンドライン引数解釈が特殊かも - 水底で思うこと

    プログラムに対して空白を含む文字列を与えたとき、C や Java ならばこうなります $ ./program '[1 2 3]' => "[1 2 3]" という文字列1つが引数しかし、Clojureだとこうなるみたいです。 $ ./program '[1 2 3]' => "[1" "2" "3]" という3つの文字列ひとつの文字列として与えたい場合、もう一つクオートするか、 $ ./program '"[1 2 3]"' => "[1 2 3]"空白をエスケープしないとダメみたいです。 $ ./program '[1\ 2\ 3]' => "[1 2 3]"引数としてリストやマップを文字列で与えて、read-string で評価しちゃおうなんて考えていると引っ掛ります。というか引っ掛りました。 追記 これはプログラムをインタプリタで実行した場合の挙動のようです。lein uberjar

    Clojureのコマンドライン引数解釈が特殊かも - 水底で思うこと
  • ClojureとGStreamerで動画再生 - 水底で思うこと

    はこべにっき#さんの記事を参考に Clojure バージョンを書いてみました。leiningen で作ったプロジェクトの lib ディレクトリに gstreamer と jna の jar を放り込むだけで動作しました。OS は Ubuntu9.10 です。 ミニマムコード (ns sample_gst.core (:import [org.gstreamer Gst] [org.gstreamer.elements PlayBin] [org.gstreamer.swing VideoComponent])) (defn -main [& args] (Gst/init) (let [video-component (VideoComponent.) play-bin (doto (PlayBin. "sample") (.setInputFile (java.io.File. (fir

    ClojureとGStreamerで動画再生 - 水底で思うこと
  • clojureで棒読みちゃんクライアント - 水底で思うこと

    ニコ生等でお馴染の「棒読みちゃん」のクライアントプログラムを作ってみました。socket通信なのでネット越しに棒読みさせることもできます。 棒読みちゃんはWindowsのアプリですが、これを使えば仮想OSのLinuxからホストWindowsで稼動している棒読みちゃんにコマンドを送る、みたいなことができます。もちろんネットで繋った別マシンからでも可能です。 ちなみに棒読みちゃんのポート番号はデフォルトで50001です。 追記 2011/5/17 clojure-1.2.0 では 128以上の整数を byte型へ変換しようとすると例外が発生するようになりました。Java の Byte型 の有効範囲 -128 ~ +127 に収まるよう、表現形式を変換する必要があります。 (ns bouyomi-client (:import [java.net Socket])) ;; clojure 1.

    clojureで棒読みちゃんクライアント - 水底で思うこと
  • ClojureでJavaクラスのコンストラクタをapplyする - 水底で思うこと

    複数引数のコンストラクタにシーケンスをわたす。 最初こんなコードを書いてエラーになった。 (apply java.util.GregorianCalendar. [2010 5 20]) ;;=> java.lang.ClassNotFoundException: java.util.GregorianCalendar... 「new class名」の構文糖「class名.」は、applyに渡せないらしい。 (apply new java.util.GregorianCalendar [2010 5 20]) ;;=> java.lang.Exception: Unable to resolve symbol: new in this context ... これも駄目。new は関数じゃないから apply できない。 ラムダ式で包めばいい? (apply #(java.util.Gre

    ClojureでJavaクラスのコンストラクタをapplyする - 水底で思うこと
  • Clojureいいかもしれない - 水底で思うこと

    なんとなくプログラミングClojureを買って一通り読みました。その時は「なるほど結構新しい試みのlispだな〜」くらいの感想でしたが、数日webで調べならがいじったところこれはすごい言語かもしれないと思い始めました。 Javaライブラリが使える Clojure自身のライブラリはまだまだ発展途上ですが、もし欲しい機能がなくても Javaのライブラリに頼れる。実行時にjava コマンドに -cp でライブラリ jar を指定するだけなので手軽。 lispである Javaのライブラリを使うときもlispのシンプルな構文でかけるため、Javaでコーディングするより数倍楽。あらゆるコレクションや木構造を、seqとして同じように処理できてしまうのも面白い。 リストも配列もファイルデータもディレクトリ階層もXMLノードも、みんな同じ関数で処理できてしまう。 Emacs + Slime で開発できる e

    Clojureいいかもしれない - 水底で思うこと
  • 1