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

foldr

自作。 (defn foldr [f init lst] (if (empty? lst) init (f (first lst) (foldr f init (rest lst))))) うーむ、しかし再帰を外すことはできるのか?http://lispuser.net/memo/lisp/2007-05-29-23-08.html に習ってfoldの実験。 user=> (reduce #(cons %2 %…

第13回Formal Methods勉強会

いくつか文献紹介があった。 Yacc is dead. http://arxiv.org/PS_cache/arxiv/pdf/1010/1010.5023v1.pdf Derivatives of Regular Expressions 正規表現しちへんげ!まとめ http://www.kmonos.net/wlog/115.html#_2300101221 Dexter Kozen. A completeness th…

再帰を使わない

第13回Formal Methods勉強会にて、 「再帰を使わずにfoldrで書く」という話があったので、 Clojureの場合reduceでやってみる。 (defn factorial [n] (reduce * 1 (take n (iterate inc 1)))) (defn fib [n] ((reduce (fn [[a b] _] [b (+ a b)]) [0 1] (rang…

powerset

Clojureにはpowerset関数がないのかな。 ということでベタで作ってみた。https://gist.github.com/796299Clojureらしいコンパクトなコードにならないものか・・・。と思ったら、Clojure-jaにて紹介してもらった。 clojure.contrib.combinatorics/subsets が…

トップエスイーチュートリアル「VDM++による形式仕様記述」

VDM

http://topse.or.jp/docs/?q=node/16 受けてきた。VDM++のイントロダクションとして良い勉強になった。 実際使ってみると、陽定義で操作の中身を書くのは簡単。 難しいのは事前条件、事後条件を抜けもれなく書くことだ。以下は演習課題の一部分 -- multiChoo…

Incanter

MATLABよりも簡単にできるんじゃないか、と思って、 Interface Oct,2007 の記事のコードを変換。 (use '(incanter core stats charts)) ; 平均μと分散σ^2を指定して、正規分布から標本を抽出する。 (defn randncq [mu variance n-samples] (let [sigma (sqrt…

一行野郎

Clojureでawkのようなフィルタ処理をやろう・・・ といろいろ考えていたが、楽にできることがわかった。 準備 この辺りを使えば簡単。 (use '[clojure.contrib.duck-streams :only (reader read-lines)] '[clojure.contrib.str-utils :only (re-split)]) 先…

quicklisp

Windows上でのasdf-installはいまいち分からない、と思っていたら、http://www.quicklisp.org/quicklispがめちゃくちゃ便利だ。基本の操作をメモ。 $ sbcl --load quicklisp.lisp * (quicklisp-quickstart:install) * (ql:system-apropos "vecto") * (ql:qui…

OAuth with twitter4j

OAuthは一度やってしまえば何度も認証はいらないらしいので、手順だけまとめてみる。 1 consumer-keyとconsumer-secretの取得 twitter.comで先に自分のアプリケーションを登録し、consumer-keyとconsumer-secretをしておく。 2 必要なライブラリのインポート…

twitter4j - SearchTweets

TwitterのUIとしてのClojureを模索してみる。https://gist.github.com/775816 (import '(twitter4j Query QueryResult Tweet Twitter TwitterException TwitterFactory) '(twitter4j.http AccessToken RequestToken) '(java.util List Properties)) (defn se…

タッチタイピングプログラム

学生のころはawkで書いてたなぁ。https://gist.github.com/775780 ; touch typing program (def random (java.util.Random.)) (def keychars "fjdkslaghvmcxzbnrueiwoqpty;,./") (def *initial-level* 2) (defn make-problem-word [level] (apply str (for […

アラビア数字→命数変換

https://gist.github.com/774229 (def digit {\0 "" \1 "一" \2 "二" \3 "三" \4 "四" \5 "五" \6 "六" \7 "七" \8 "八" \9 "九"}) (defn digit-keta [d m] (if (= (digit d) "") "" (if (and (not= m "") (= (digit d) "一")) m (str (digit d) m)))) (defn…

TAPL de-Brujin index

TAPL読書会(2011/1/9)で第6章にて出てきた、s式の変数名に一意な数値を割り当てるアルゴリズム。https://gist.github.com/774055 (use '[clojure.contrib.seq-utils]) (defn position [f coll] (first (positions f coll))) (defn de-brujin-index [x coll] …