2010-02-01から1ヶ月間の記事一覧

contrib.seq-utilsを使ってみた。

使い方のカタログ的なもの。 (use 'clojure.contrib.seq-utils)が必要。 separate gaucheのpartitionみたいなもの。述語をひとつ取り真か偽かで仕分けする。 (def nums (take 10 (iterate inc 0))) (filter odd? nums) ; => (1 3 5 7 9) (filter (complement…

clojureのファイルIO

プログラミングclojureは読み物としては面白いのですが、実際に自分でclojureのコードを書こうとするとすこし手間取ってしまいます。*1 ファイルIOもそのようなうちのひとつなのですが、clojureでのファイルIOについて少し調べてみました。 とりあえず以下の…

練習問題 - プログラミングスレまとめ in VIPをやってみる

全体的にlazy-seqをたくさん使っているみたい。 FizzBuzz 無限ストリーム(sequence)なこと以外特筆することはなさそう。 (def fizzbuzzs (for [i (iterate inc 1)] (cond (= 0 (rem i 3) (rem i 5)) "fizzbuzz" (= 0 (rem i 3)) "fizz" (= 0 (rem i 5)) "buz…

逆引きclojure文字列の部分(途中)

合っているのか自信がないのでblogに貼るだけにしておく 今のところ 文字のリスト(sequence)から文字列を作成する上手い方法が見つかっていない。 暫定的な対応策は以下 (defn cs-to-str [cs] (String. #^"[C" (into-array Character/TYPE cs))) 文字列を結…

clojureの中を覗く

classpathのリスト 現在のnamespaceで利用できる関数 classが持っているmethod classpath clojureはjavaのSystemClassLoader以外のところにclasspathを格納していた。 (defn current-classpath [] (let [xs (list (.. java.lang.ClassLoader getSystemClassL…

clojureでAAを生成する。

何だかまだclojureには慣れないなー*1 read-lines*とか自分で作らなければいけないはずがないとおもうのだけと。*2 (ns tool.aa (:use [clojure.contrib.command-line :only (with-command-line)] [clojure.contrib.duck-streams :only (reader)]) (:import …

clojureで簡易grepコマンドを作ってみる。

必要なこと ファイルの読み込み方(できればseqで取り出したい) clojure.contrib.duck-streamsのread-linesとreaderを使えばいい。 正規表現の使い方 re-find,re-pattern .classファイルの生成の仕方 (compile ) code ;;file:tgrep.clj (ns tgrep (:gen-class…

気づかなかった手続きlist-tabulate(srfi-1)

連番的なリストを生成をする時、iotaとsrfi-42の手続きだけしか使っていなかった。 今までずっとlist-ec以外にiotaで表せない順序だったリストを生成する方法がないというのは変だと思っていたのだけれど。今日たまたまlist-tabulateを発見した。 (use srfi-…

luaで時間計測

lua

luasocketを使わないとだめなのかな? sudo apt-get install lua5.1 liblua5.1-socket2 require "socket" local t = socket.gettime() func() io.write(string.format("lua Elapsed %f\n", socket.gettime() - t))

lisp的直積集合

appendを使わなくても書ける (define (cp . seqs) (define (cp1 xs acc) (fold (lambda (e r) (fold (cut acons <> e <>) r xs)) '() acc)) (let loop ((seqs seqs)) (match seqs [(xs) (map list xs)] [(xs . seqs*) (cp1 xs (loop seqs*))]))) reduceを使…

schemeで多変数関数

http://d.hatena.ne.jp/yatsuta/20100211 高階関数についての内容のようです。この日記に書かれた方法は、キーワード引数の原形のような気がしました。 数学が苦手なので、日記中のf+gがどうして5つの引数を取る関数になるのかよくわからないですが、 gauche…

開いている全てのバッファの.cppと.hをrevert-bufferするelisp

http://d.hatena.ne.jp/berrylife/20100207/1265552316 開いている全てのバッファの.cppと.hをrevert-bufferするなら (require 'cl) (defun revert-matched-buffers (pattern) (loop for b in (buffer-list) when (string-match pattern (buffer-name b)) do…

現在のclojure用のemacsの設定

http://gist.github.com/297284 docstringとかまったく書いていない。defcustomも存在しない。

3と3の倍数(正規表現の使い方)

正規表現は自己適用的じゃないみたい。re-findを使えば良いらしい。 x->stringのようなものが何なのか分からない。とりあえず、with-out-strを利用している。 (map (fn [i] (if (or (zero? (rem i 3)) (re-find #"3" (with-out-str (print i)))) "@" i)) (ra…

class-pathを追加するのが面倒。

jvm系の言語はclass-pathを追加する機会が頻繁にあるのかな?良く分かっていないけれど、~/.clojureに読み込む必要がありそうなファイルを列挙してそれを読み込む関数を書いた。(ファイルならそれ自身、ディレクトリなら直下の.jarファイル) http://d.hatena…

clojure用emacsの設定

slimeとか良く分からないので、必要そうなものを自分で書いた。 あとでここに書いてある設定が不要になることもあるかもしれない。 run-clojure schemeの設定と同様に"C-c S"でclojureのreplを立ち上げる。 既にreplが立ち上がっている場合には、other-windo…

逆引きruby(文字列)をscheme(gauche)で2

コメントをもらったので、その情報を元に追加します。 全体的にsrfi-13の手続きを把握しきれていなかったみたいです。 そして#`"..."を不完全な文字列と勘違いしていました(本当は文字列補間の構文) 文字列中の式を評価し値を展開する(勘違い) #~""は不完全…

逆引きruby(文字列)をscheme(gauche)で

gaucheで文字列を使う場合、クラスを使用します。だからと言って、主に利用するのがクラスのメソッドというわけはありません。 文字列を結合する 文字列を更新する手続きは基本的には用意されていません。文字列を結合する場合には、結合した文字列を新たに…

まじめに文章を書く練習をしてみよう。

人に自分の思ったことを伝えられない気がする。ヤバい。 なので、内容ともかく意味の通る文章を書く練習をする。 逆引きrubyの内容をscheme(gauche)で書いて、それを説明するようにしてみる。間違ったところや気づかなかったところがあったりした場合には教…

追記

正規表現とformatを使えばこれで十分なのか (define (string-succ s) (rxmatch-cond [(#/^\d+$/ s) (n) (number->string (+ 1 (string->number n)))] [(#/^(\D*)(\D)$/ s) (#f ps last) (let1 chint (char->integer (string-ref last 0)) (string-append ps …

string-succ(次の文字列)が意外と難しい。

逆引きrubyの "次"の文字列を取得するを取得するというサンプルのString#succと同じ結果を返す手続きが意外と難しい。書いているうちにぐちゃぐちゃになってしまった。たぶん、もっと綺麗に書ける気がする。 だいたいの仕様 文字列を受け取って、 数字の場合…

リアルタイムっぽい感じに動作するoccur

anything-occurがあれば用無しだけど… read-from-minibufferにkey-mapを渡せることを知りませんでした。 (require 'cl) (defvar ort-running-timer nil) (defvar ort-current-input "") (defvar ort-current-buffer nil) (defvar ort-current-window nil) (d…