タグ

ブックマーク / e-o-n.hatenadiary.org (8)

  • Echo server - e-o-nのClojure日記

    Programming Clojureを読んだ直後にも書いたが、またEcho serverを書いてみた。以前に作成したのは冗長だった。 clojure.contrib.server-socketとclojure.contrib.duck-streams/copyを使うと簡単だ。 (ns socket-test (:use [clojure.contrib.server-socket :only (create-server close-server)] [clojure.contrib.duck-streams :only (copy)])) (def *server* (atom nil)) (def *port* 10000) (defn echo-fn [in out] (println "echo start") (copy in out) (println "echo end")

    Echo server - e-o-nのClojure日記
  • フィールドとメソッド探しにちょっと便利な関数を作ってみた - e-o-nのClojure日記

    SLIMEで開発している際に、Javaのクラスが持つフィールドやメソッド名を調べたい事がある。 例えば、文字列を大文字に変換するメソッドを忘れてしまって、uppercaseだったかな?toUpperだったかな?なんて時に、ちょっと便利な関数。 使い方 (inspect 調べたいオブジェクトまたはクラス マッチ文字列) すべてのフィールド・メソッドを表示したい場合は (inspect 調べたいオブジェクトまたはクラス) とする。 使用例 user> (use 'tools) ; tools名前空間をuseする nil user> (inspect String "upper") ; Stringクラスをupperで調べる String toUpperCase(Locale) String toUpperCase() nil user> (inspect Integer) ; Integerク

    フィールドとメソッド探しにちょっと便利な関数を作ってみた - e-o-nのClojure日記
  • antでcljファイルをコンパイル(build.xmlのひな形) - e-o-nのClojure日記

    antでcljファイルをコンパイル後、jarにアーカイブするためのbuild.xmlを作成した。 プロジェクト構成 プロジェクトのディレクトリ構成は以下の通り。 hogeapp/ … プロジェクトディレクトリ src/ … ソースファイル sample/hoge/hogeapp.clj … サンプルアプリ classes/ … クラスファイル lib/ … ライブラリ clojure.jar clojure-contrib.jar hogeapp.jar サンプルアプリ コマンドライン引数を標準出力に出力する簡単なアプリ。 (ns hogeapp (:gen-class)) (defn -main [& args] (doseq [arg args] (println arg))) build.xml 配布と実行が簡単にできるように、libディレクトリにあるclojure.jar,cloj

    antでcljファイルをコンパイル(build.xmlのひな形) - e-o-nのClojure日記
  • clojure.contrib.def - e-o-nのClojure日記

    clojure.contrib/def.cljのソースを眺めたのでメモ。 名前 説明 defvar 変数を初期値とドキュメント文字列で定義する。 defunboud unbound変数をドキュメント文字列で定義する。 defmacro- defmacroのプライベート定義版。 defvar- defvarのプライベート定義版。 defunbound- defunboudのプライベート定義版 defstruct- defstructのプライベート定義版 defone- defonceのプライベート定義版 defalias 変数のエイリアスを定義する。メタデータには元の変数のメタデータがマージされる。 defhinted 初期値のクラスを型のヒントとして変数を定義する。 name-with-attributes マクロ引数の定義で使用できる。ドキュメント文字列やメタデータを簡単に定義できる(よ

    clojure.contrib.def - e-o-nのClojure日記
  • (compile 'hoge.fuga)でコンパイルできない - e-o-nのClojure日記

    Programming Clojureを読みながらclojureの勉強中である。 hoge/fuga.cljをコンパイルしようと、 (compile 'hoge.fuga) を実行すると、ClassNotFoundException例外が発生した。 コンパイルしたいcljソースファイルと、コンパイルされたクラス出力ディレクトリはclasspathを通さないと駄目だった。 ソース格納ディレクトリ c:\home\workspace\clj_src (この下にhoge\fuga.cljを作成) クラス出力ディレクトリ c:\home\workspace\classes とすると、先日のclj.batは以下のように修正する。 @echo off set OPT_DIR=c:\home\opt set CLOJURE_DIR=%OPT_DIR%\clojure set CLOJURE_JAR=%C

    (compile 'hoge.fuga)でコンパイルできない - e-o-nのClojure日記
  • alterとcommute - e-o-nのClojure日記

    Programming Clojureをcommuteの説明まで読んだので、alterとcommuteの違いが分かるようなサンプルプログラムを書いてみた。 test.clj (def *counter* (ref 0)) (defn test-func [name time] (fn [] (dotimes [i 5] (Thread/sleep 1000) (print (format "%d: I am %s. " i name)) (dosync (print ".") (.flush *out*) (alter *counter* inc) ; (commute *counter* inc) (println (format " --> %d" @*counter*)) (when time (Thread/sleep time)))) (println (format "%s e

    alterとcommute - e-o-nのClojure日記
  • echo server - e-o-nのClojure日記

    Programming Clojureを読み終えた。 Common Lispとは微妙に違うので、コードを書く時にとまどう事も多いが、豊富なJavaライブラリを直接使用できるのは大きな利点である。 emacs + slimeを使えば、動作確認をしながらコードを書けるので、サクサク開発できて、なかなか便利である。 一通りの機能は理解できたので、いろいろ書いてみようと思う。 ネットワーク関係が面白いので、まずはecho serverを作ってみた。 sample/echo.clj (ns sample.echo (:use [clojure.contrib.server-socket :only (create-server close-server)])) (def port-no 3000) (defn echo [in out] (let [caption (str "*echo(" (.g

    echo server - e-o-nのClojure日記
  • duck-streams - e-o-nのClojure日記

    clojure.contrib.duck-streamにはファイル入出力用の便利な関数が定義されている。 ; 使用する関数を宣言 (use '[clojure.contrib.duck-streams :only (spit append-spit pwd)]) ; ファイルに文字列を出力する。 (spit "hello.txt", "こんにちは、世界!\n") ; ファイルに文字列を追記する。 (append-spit "hello.txt" "こんばんは、世界!\n") ; カレントディレクトリを取得する。 (pwd) 実行結果は次の通り。 user> (spit "hello.txt", "こんにちは、世界!\n") nil user> (append-spit "hello.txt" "こんばんは、世界!\n") nil user> (pwd) "c:\\home\\workspa

    duck-streams - e-o-nのClojure日記
  • 1