2010-01-01から1年間の記事一覧

require と use

Clojureで書かれた外部コードを参照する時、require や use を使います。ちょっとまとめてみました。使用しているClojureは 1.2.0-master-SNAPSHOTです。 require と use の違い 例えば、clojure.pprint 名前空間に定義されている、pprint という関数を使う…

ランプの魔人と勝負

WEB

昨夜 Akinator で3時間ほど遊んでしまった。あの中毒性はやばい。かなりの数遊んだけど覚えているものを書き出してみる。 質問20個で正解 山中さわ子(けいおん!) マジョーリカ・ル・フェイ(オオカミさんと七人の仲間たち) 沙英/うめ先生(ひだまり…

Clojure 環境を 1.1 から 1.2 へ移行

leiningen と Clojure を同時に 1.2 へ移行してみた。 とりあえず作成中のプロジェクトの依存ライブラリを 1.2.0-SNAPSHOT とし、lein deps → lein compile。 コンパイルエラーになったのは、clojure.contrib.seq-utils の flatten と shuffle の2つの関数…

Clojureのコマンドライン引数解釈が特殊かも

プログラムに対して空白を含む文字列を与えたとき、C や Java ならばこうなります $ ./program '[1 2 3]' => "[1 2 3]" という文字列1つが引数しかし、Clojureだとこうなるみたいです。 $ ./program '[1 2 3]' => "[1" "2" "3]" という3つの文字列ひとつの…

ClojureとGStreamerで動画再生

はこべにっき#さんの記事を参考に Clojure バージョンを書いてみました。leiningen で作ったプロジェクトの lib ディレクトリに gstreamer と jna の jar を放り込むだけで動作しました。OS は Ubuntu9.10 です。 ミニマムコード (ns sample_gst.core (:imp…

clojureで棒読みちゃんクライアント

ニコ生等でお馴染の「棒読みちゃん」のクライアントプログラムを作ってみました。socket通信なのでネット越しに棒読みさせることもできます。 棒読みちゃんはWindowsのアプリですが、これを使えば仮想OSのLinuxからホストのWindowsで稼動している棒読みちゃ…

hatena-modeいれたみた

ちゃんとポストできるかな?

Clojureでイメージファイルのリサイズ

思ったより処理速度早かった。リアルタイムな処理中でも使えそう。 出力はJpegだけですが、ちょっといじれば拡張できます。ImageIOが対応している形式なら出力できると思う。 (ns resize-image (:import [java.awt.image BufferedImage] [java.awt Image] [j…

XEmacsと他のEmacsを共存させる。

windows です。linuxでも通用するかもしれませんが試していません。多分同じなんじゃないかな。(というか emacs あるのに xemacs 入れるやつは普通いない:P) ファイル構成 まずファイル構成ですが、 ■XEmacsのファイル構成 ~/.emacs (設定ファイルのエントリ…

XEmacsのツールバー等を消す

windows です。普段本家 emacs を使っているんですが、ちょっとした気まぐれで xemacs21 を入れてみました。で最初にはまった点がツールバー等を消す方法。 次のような記述を ~/.xemacs/custom.el に記述しておけばよいです。 (set-specifier menubar-visibl…

対応する括弧で閉じてくれる elisp

3種類の括弧の閉じ分けが面倒なので作ってみた。デバッグ不十分なので不具合あるかも。あと、ナローイングとか考慮されていません。 ;; 開き括弧 { or ( or [ に対応した閉じ括弧 } or ) or ] を挿入する (defun clj-close-sexp () (interactive) (let ((cl…

seq? sequential? coll?

コレクションっぽいデータ構造にたいして、それぞれどうなるか調べてみた。 結果 seq? sequential? coll? Java配列(int-array 2) false false false 文字列"12" false false false セット#{1 2} false false true マップ{:a 1 :b 2} false false true ベクタ…

非矩形Windowで画像表示

こちらの記事を参考にClojureで書いてみた。 画像はこちらからお借りしました。二重ループでピクセル単位の処理をしている部分がなんとなく嫌だったので全座標を要素とするシーケンスをつくり、それを加工しまくって最終的に不透明領域を表すRectangleオブジ…

bindingとvarについて

bindingってなんだろう? プログラミングClojureを読んでいまいちピンと来なかったので考えてみました。 bindingは新しい変数を作らない ;; program-1 (let [x 10] x) ;=> 10 (binding [x 10] x) ;=> java.lang.Exception: Unable to resolve var: x in this…

-?> と .?.

nilを返す関数 こんな階乗関数を書いたとします。 (defn fact [n] (when (>= n 0) (loop [n n acc 1] (if (< n 2) acc (recur (dec n) (* acc n)))))) 最初に引数チェックを行い、引数が0以上の時のみ処理をおこないます。引数が負数だと何もせず何も返さな…

別解 ClojureでJavaクラスのコンストラクタをapplyする。

以前こんな記事を書きましたが、ライブラリ探索していて new-by-name という関数を見付けました。これを使えば次のように apply + new が実現できます。 (use '[clojure.contrib.core :only (new-by-name)]) (use '[clojure.contrib.str-utils :only (re-spl…

解決 Clojure+Linuxで透明/半透明フレーム

やり方が分かりました。 環境によるかもしれませんが、うちの環境では以下のコードでうまくいきました。 Ubuntu 9.10 + gnome + compiz 環境です。 (import 'javax.swing.JFrame) (import 'com.sun.awt.AWTUtilities) (def frame (doto (JFrame. "半透明フレ…

遅延シーケンスでFizzBuzz

(defn cycle-pattern [n s] (lazy-cat (take (dec n) (repeat "")) [s])) (def fizz-seq (cycle (cycle-pattern 3 "fizz"))) (def buzz-seq (cycle (cycle-pattern 5 "buzz"))) (def fizzbuzz-seq (->> (map str fizz-seq buzz-seq) (map #(if (empty? %2) %…

Clojure+Linuxで実現難しそうなこと。

一週間ほどあれこれ調べて実現が難しそうに思った点。どちらもJavaに起因するものです。単に自分がJavaについて知識不足と言うこともあると思いますが、ググって簡単に解決できる問題ではなさそうです。 透明/半透明フレーム 検索するといくつか解決法がヒッ…

Clojureの正規表現

以下全て、Clojure1.1.0 をベースにしています。 【正規表現オブジェクト】 正規表現(pattern)オブジェクトの作成方法は3通りあります。 ;; どれでも結果は同じ。 ;; javax.util.regex.Patternオブジェクトが生成される。 (def re #"[\da-f]+") (def re (r…

ロケット打ち上げClojure版

Clojureでも書いてみた。(C#版はこちら) この2週間ほどで自分のコーディングスタイルもだいぶ変わったなぁ。今の自分なりの「Clojureらしいプログラム」はこんな感じ。 (use '[clojure.contrib.pprint :only (cl-format)]) (def fmt (partial cl-format f…

C#4.0でラムダ関数を使ってみる。

C#

しょーもないプログラムです。こんなことができるんだ〜程度のお話。 ニコ生放送みてたらこんなプログラムが出てきた。 Clojureで書いたら〜。ってのも芸が無いので、C#4.0のラムダ関数と無名型で書いてみた。 // C# 4.0 using System; namespace RocketLaun…

ClojureでJavaクラスのコンストラクタをapplyする

複数引数のコンストラクタにシーケンスをわたす。 最初こんなコードを書いてエラーになった。 (apply java.util.GregorianCalendar. [2010 5 20]) ;;=> java.lang.ClassNotFoundException: java.util.GregorianCalendar... 「new class名」の構文糖「class名…

コレクションあれこれ

vector と list は同値判定できる。でも set や hash-map はダメ。 (= [1 2 3] '(1 2 3)) ;=> true (= [1 2 '(3 4)] '(1 2 [3 4])) ;=> true (= [1 2 3] #{1 2 3}) ;=> false (= [:a 1 :b 2] {:a 1 :b 2}) ;=> false コレクションの大小比較(辞書順)は com…

leiningenを使った Clojure 開発

leiningen は clojure版 mavenです。とても便利。 インストールはこのへんを参考にしてください。 現状はlinux版のみ(?)がまともにうごくみたいです。 以降の記事では、clojure 1.1.0 と emacs による開発を想定しています。記事中に間違いなどありましたら…

Clojureいいかもしれない

なんとなくプログラミングClojureを買って一通り読みました。その時は「なるほど結構新しい試みのlispだな〜」くらいの感想でしたが、数日webで調べならがいじったところこれはすごい言語かもしれないと思い始めました。 Javaライブラリが使える Clojure自身…

emacs23のw3mが動かなくなった

Linux版Google日本語入力mozcがリリースされていたらしい。anthyの使いにくさに苦慮していたので早速入れよう。。。と思ったが、ubuntu9.04では入れられないらしい。9.10から導入された入力メソッドiBusが必要だとか。 というわけでubuntu10が話題になってい…

Parallelこえぇ

C#

Parallel.For で、1〜100までの数値をFizzにするかBuzzにするか、100個の並列処理をさせるプログラムを書いたつもりが処理が終わらない。 そのうちVisualStudio以外のアプリが次々と強制終了を始めた。 おかしいと思ってタスクマネジャをみたらCPU使用率が 9…

Visual C# 2010 Express入れた

C++

OSはWindowsXP Pro 32bit版。 WEBインストーラ(vcs_web.exe)を落としてセットアップ。2008EEと同様に D:\Program Files にインストール。 途中再起動を求められリブートするとメッセージダイアログが表示されてインストールが途中で終了。もう一度 WEBインス…

FizzBuzz関数処理時間計測クラスの問題点

C++

常に同じ条件で関数を実行するというのは難しい。 前回こんなクラスを書いたけど、実行の仕方で結果が微妙に違うみたい。 int main(void){ const unsigned int N = 999999; const unsigned int TIMES = 100; cout << TIMECHECK_N(FizzBuzz1, N, TIMES) << en…