プログラミングHaskellの謎演算子

プログラミングhaskellを読んでいると、時々謎の演算子が現れて戸惑う。 前後の文脈等から察するとこんな感じでしょうか。できればコードそのままの記法をして欲しかった。 ∧ ⇒ && -- 論理積 ∨ ⇒ || -- 論理和 ‐の左端に下向きの鉤がついてる奴 ⇒ not -- 論…

サーバは vi で弄れと、誰が決めたんだ〜♪

GUI版Emacsには「Emacsの中でEmacsが起動できない」という弱点がある。リモートサーバのファイルを編集する場合、tramp を使うという方法もあるが、リモートの root 権限のファイルを弄るとかなると面倒臭い(不可能ではないらしいけど...)。 一番いいのは …

1000以下の回文素数で最大のものを示す

1000以下の回文素数で最大のものを示せ 示してみる。 (use '[clojure.contrib.lazy-seqs :only (primes)]) (defn palindromic-number? [n] (let [v (vec (str n))] (= v (reverse v)))) (defn last-palindromic-prime-number [limit] (->> primes (take-whil…

Pythonの分配束縛

◆タプルで分配束縛 x,y にまとめて値を代入するようなコードでは普通に使っていました。 (x,y) = (1,2) #あるいは x, y = 1, 2 でも、もっと複雑な構造でも、分配束縛できるのは知らなかった。 (a, (b, (c,)), d) = (1, (2, (3,)), 4) [a,b,c,d] #=> [1, 2, …

tree-seq と flatten

◆tree-seq をちゃんと理解したい 理解していなかったのでいろいろやってみた。 (defn tree-seq "Returns a lazy sequence of the nodes in a tree, via a depth-first walk. branch? must be a fn of one arg that returns true if passed a node that can h…

4引数で partition

一見単純だけど色々お世話になってる便利な関数 partition。4引数で呼び出せるのをしらなかった。 (def a [1 2 3 4 5 6 7 8 9 10 11]) ;; 2引数 (partition 4 a) ;=> ((1 2 3 4) (5 6 7 8)) ;; 3引数 (partition 4 3 a) ;=> ((1 2 3 4) (4 5 6 7) (7 8 9 1…

Clojureで連番リストの歯抜け取得

古い記事ですが、ちょっと面白い問題なのでやってみた。=> 連番リストの歯抜け ■(partition 2 1) って便利 (defn pick-toothless [coll] (->> coll (partition 2 1) (remove #(= -1 (apply - %))) (mapcat (fn [[a b]] (range (inc a) b)))))(pick-toothless…

Clojure で棒読みちゃんクライアント再び

以前実験的に作りましたが、あれから色々コードの書きかたを憶えたので、もうすこしちゃんと書いてみました。アドバイスなどありましたら是非。 ■棒読みちゃんクライアントプログラム (ns bouyomi-client.core (:gen-class)) (defmacro create-ctor "デフォ…

整数を Java のバイト配列に変換する。

以下、試行錯誤した内容を順を追って書く。 急いで結論が見たい人は、ここへジャンプしてください。 ■整数をバイト列(シーケンス)へ変換 これはそれ程難しくない。方法はいろいろあると思いますがここでは末尾再帰で。 (defn byte-split [n] (loop [n n, col…

Clojureのマップ(連想配列)のキホン その1

2011年5月現在、最新Release版である clojure 1.2 を前提にしています。 ■マップの種類 Clojureのマップは三種類あります。repl等での表示は同じに見えますが型はそれぞれ違います。 (array-map :a 10 :b 20 :c 30) ;=> {:a 10, :b 20, :c 30} (hash-map :a …

OS起動時の SATAエラー

ここ数日、Ubuntuの起動時にHDDがカコンカコンと何度も音をたて、画面にはエラーらしきメッセージが出続けるという、心臓に悪い現象が頻発していました。 それでも、暫く放置しているとOSはちゃんと起動するのでそのままにしていたのですが、いいかげんヤバ…

Emacs Lisp の正規表現における選択条件(縦棒)

「普通の」言語で「イメージファイル名かどうか」を判定する場合、例えば pythonなら re.search("\.(jpg|png|gif|tiff)$", filename) これが Emacs Lisp では、 (string-match "\\.\\(jpg\\|png\\|gif\\|tiff\\)$" filename) 久しぶりにEmacs Lispで正規表現…

VirtualBox情報サイト http://vboxmania.net

Python で Clojure っぽい関数チェーン。

■便利なメソッドチェーンが欲しい。 Rubyならこんなに直感的なコード、 # ruby a = [1,4,3,2] p a.sort.reverse.map{|x| x.to_s}.join('-') Pythonだとイケてない。 # python a = [1,4,3,2] print '-'.join(map(str, reversed(sorted(a)))) 操作対象の a を…

emacs24 で emacs-w3m を使う。

前と同じところでハマって、その時の記事に記載した参考サイトが無くなっていた。 もう一度、もう少し詳しく書いておく。まず依存ライブラリである apel をインストール。 apel配布サイトから tar.gz を落して $ tar fxvz apel-10.8.tar.gz $ cd apel-10.8 $…

emacs24 では make-local-hook がエラーになる

新しい Ubuntu 環境で開発版 emacs24(bzr)をコンパイルして使ってます。バージョンは emacs24.0.50.1。 基本的な設定が一段落したところで、jaspace の on/off 切替がエラーになることに気付きました。 Symbol's function definition is void: make-local-ho…

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…