Clojure

VimClojureインストローリング

IDE めんどくさい。 vimスクリプト http://www.vim.org/scripts/script.php?script_id=2501 から、vim プラグインを持ってきて .vim にコピー nailgun server http://clojars.org/repo/vimclojure/server/ から最新の server-.jar を取ってきて、jdk/jre/lib…

Clojure で合成音声を使ってしゃべらせてみる

Java で合成音声をやるには、freeTTS なるものが使えるらしいので、Clojure でやってみた。 とりあえず、零人間でプロジェクトをつくる lein new sapi cd sapi lein deps スピーチエンジン(?)をゲット http://sourceforge.net/projects/freetts/files/ ここ…

VimShell に Clojure のブロックを送る

以下のコードがあって、(defn ..) ブロック内にカーソルがあるとき、(defn ..) ブロック全体を VimShell に送信する。 (defn foo [arrrrg] "Foo function!" (println (str 'foo arrrrg))) 普通、行頭に "(" あるよね?みたいな前提でうごきます。あるよね? …

大きなオブジェクトをファイルに書き出し&読み込む

今回扱ったのは、(prn obj) すると 7MB 以上になるオブジェクト かなり簡単にできるので、アプリケーションのデータ保存に便利かも。 書き出し db が大きな hash-map オブジェクト (binding [*print-length* nil *print-level* nil] (with-out-writer "/foo/…

Clojure REPL on VimShell

filetype が clojure にならないので、補完の具合がよろしくない。 ("-" で区切られてしまったり) そこで cd ~/.vim/ftplugin/ ln -s ~/.vim-plugins/vimclojure/ftplugin/clojure.vim int-lein.vim ln -s ~/.vim-plugins/vimclojure/ftplugin/clojure int-l…

マクロ練習第二弾 - Java オブジェクトのメソッド名とメソッドの値のマップを返す

本当はmethodnameに相当するkeywordを作ってマップで返したかったのですが、symbolからkeywordを作る手段が思いつかず、断念しました。 シンボルからキーワードは (keyword 'sym) で OK 元エントリのは単純なメソッドにしか使えないので、もうちょっと便利に…

キャストの方法

Java の SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info); こういうのは (let [#^SourceDataLine line (AudioSystem/getLine info)] ....) と、すればOK

ネストしたクラス/クラス内クラスの使い方

DataLine クラス内の Info にアクセスしたい場合は (import 'javax.sound.sampled.DataLine$Info) (DataLine$Info. arg1 arg2) のようにすれば良いっぽい。 上のように import しても Info だけではアクセスできない。 DataLine$Info でひとかたまり

Clojure で wav を再生

某生放送*1を聞きながら、自分でも書いてみたもの めんどくせーー (import 'javax.sound.sampled.AudioInputStream) (import 'javax.sound.sampled.AudioSystem) (import 'javax.sound.sampled.DataLine) (import 'javax.sound.sampled.DataLine$Info) (impo…

Clojureのリードマクロでヒアドキュメント実装してみた

公式にはリードマクロは使えない事になっているようだが、怪しい事をすればいけるらしい。 http://briancarper.net/blog/clojure-reader-macros そういうわけで、ヒアドキュメントを実装してみた。 (defn dispatch-reader-macro [ch fun] (let [dm (.get (do…

解決方法 -> ClojureでJavaクラスのコンストラクタをapplyする

つまり apply-new は第二引数が「単なるデータとしてのシーケンス」なのか「関数や特殊形式など評価後の値を得るためのS式」なのかを判断してから、展開を行う必要がある。どうすればいいのだろう?最終的には ->> 式の中で apply-new を使いたいのだが、そ…