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

StateモナドとContinuationモナド

30分プログラム、その70。 StateモナドとContinuationモナドを勉強しよう。 import Control.Monad.State import Control.Monad.Cont randomUpdate :: Int->Int->Int->(Int,Int) randomUpdate p q a = let value = a*p+q in (value,value `mod` 1000) random …

正規表現エンジン(失敗)

30分プログラム、その69。 正規表現をパースしようとして失敗した。 *Main> parseRegexp "A" [Char 'A'] *Main> parseRegexp "ABC" [Char 'A',Char 'B',Char 'C'] *Main> parseRegexp "A*" [Many (Char 'A')] *Main> parseRegexp "ABC*" [Char 'A',Char 'B',…

S式計算機

30分プログラム、その68。超簡単S式計算機id:mzp:20070623:sexpの続き。 #load "camlp4o.cma";; (* parsing *) open Genlex;; let ($) f g = f g;; type s_exp = Num of int | Symbol of string | List of s_exp list | Proc of (s_exp list -> s_exp);; let…

ITスペシャリストコースに入りたい訳

先生と相談する必要がある関係上、意志を明確にしておこう。どうせ、願書に書かないといけないしね。 論理的にまとめるのはまた今度。 プロジェクト管理・複数人による開発に興味がある このあたりの経験値が低いと痛感している 純粋な技術の経験は、とりあ…

Publish::movable_type

30分プログラム、その67。 id:mzp:20070617:mtをPraggerでやってみよう。 require 'movabletype' def movable_type(config,data) url = config['url'] blogid = config['blogid'] username = config['username'] password = config['password'] title = conf…

Publish::Bookmark

30分プログラム、その66。http://www.nslabs.jp/bookmark.dtd.htmで出力するプラグイン。はてブの一部をSafariのブックマークに登録したかったので作っていみた。使いかたはこんな感じ。 - module: RSS::load config: url: http://b.hatena.ne.jp/mzp/rss?ta…

平成19年度

http://www.is.nagoya-u.ac.jp/exam-old/d20608.pdf [1]クイックソート (1)実行時間のオーダー/最悪な場合 最悪な場合は、すでに対象となる配列が整列されている場合、だというのは有名。この場合、一回につき対象となる配列が1回短くなるだけ。なので、必要…

Lispインタプリタ(2)

でーきーたー。 Main >run "(begin (define fact (lambda(x) (if (= x 0) 1 (* x (fact (- x 1)))))) (fact 10))" 3628800 複数の式の評価には、また対応していないけれど、ちゃんと階乗も計算できる。で、 lispEq (x:y:[]) env = let (x',env') = eval x en…

Lispインタプリタ

id:zyxwvに対抗して、Lispインタプリタを作る。まだ、S式計算機という程度。30分で作ったわけじゃないけど、とりあえず、今日はこれで。とこで、 pInt = do x <- many1 digit return $ Int $ read x や pNil = do string "()" return $ List [] -- liftM?? …

ストリーム

SICP勉強会の準備。 スライドを作るまえに、いったんまとめるのが好きなので。下書き。あとでコードを載せる。 オブジェクト かなり強引にまとめる。 システムを小さい部品(module)で構築したい 各部品は時間とともに変化する状態をもつ 部品をオブジェクト…

はてブ with Fuse

はてブを整理中なのだけれども、かなり整理しづらい。 APIが公開されているからツールを作れることはできるれど、ちゃんと使えるようにするのは結構大変。そこで、Fuseではてブをマウントしてやれば、ほかの人が作った便利なリネームツールではてブの整理が…

FuseFS

30分プログラム、その64。FuseFSで遊んでみる。 準備にだいぶ時間がかかった。 準備 MacFUSE Coreを入れる FuseFSを入れる。 ただし、FuseFSはgemには登録されていないので、手動でインストールする必要がある。 さらに、Mac版は上記とは別に用意されている…

OCamlDuce

OCamlDuceで、入力されたXMLに型をつけてごにょごにょするのは無理な気がしてきた。 仕様書から、OCamlDuceの型に落すのが面倒 そもそも仕様書にしたがっているXMLはそれほどない それだけ苦労しても、変形すると大半を捨てる だから、全部に型をつけるのは…

S式パーサ

30分プログラム、その63。 OCamlのStreamでパーサを書いてみる。 # parse_string "1";; - : s_exp = Num 1 # parse_string "+";; - : s_exp = Op "+" # parse_string "(+ 1 3)";; - : s_exp = List [Op "+"; Num 1; Num 3]#load "camlp4o.cma";; open Genlex…

遅延ストリーム

おつかれ気味なので、SICP勉強会用につくってる遅延ストリームをはってごまかす。10分程度でつくった代物。 (define-syntax cons-stream (syntax-rules() ((_ x y) (cons x (delay y))))) (define (stream-car stream) (car stream)) (define (stream-cdr st…

Feed::mixi

mixiをRSSフィードにしたよ。PRaggerプラグイン Mixi新着日記プラグイン - Rubyの魔神 - はてな?Rubyグループは、新着URLしか出してくれないから、自分で書いたよ。 cache:プラグインから利用できるキャッシュライブラリ。plugin/においてね Feed::mixi:mix…

自分自身を出力するプログラム

http://www.agusa.i.is.nagoya-u.ac.jp/person/mzp/hiki/?exercise#l23より。 自分自身を出力するプログラムを書け。 できるわけないだろうがっ。 open(__FILE__){|io| io.read.display } こんなのでお茶をにごしておく。

S式計算式

30分プログラム、その62。S式計算機。ちょっとさきの勉強会のネタ。本番は、OCamlで作ったのを持っていくつもりだけれども、とりあえずRubyでも作ってみる。 > 1 1 > (+ 1 2) 3 > (* (+ 2 3) 1 3) 15require 'strscan' require 'readline' def call(name) la…

Haskellらしいfizzbuzz/OCamlらしいfizzbuzz

30分プログラム、その61。Haskellらしいfizzbuzz/OCamlらしいfizzbuzzを書いてみよう。 fizzbuzz :: [Int]->[String] fizzbuzz = map f where f n | n `mod` 15 == 0 = "fizzbuzz" | n `mod` 3 == 0 = "fizz" | n `mod` 5 == 0 = "buzz" | otherwise = show …

2-gram

30分プログラム、その60。Haskellで2-gram。2-gramは自然言語の統計的性質のひとつ。特定の2文字がどれくらいの頻度で、連続するかを調べる。 例えば、 *Main> mapM_ (putStrLn.show) $ makeGram "The licenses for most software are" (('a','r'),2) (('e',…

PukiWiki AccessKey

AccessKeyの削除 AccessKeyの追加 30分プログラム、その59。PukiWiki関連のCreamMonkeyを2つほど。 PukiWikiは、AccessKeyが設定されているため、Control+Pでプレビューが表示できる。ただ、これがMac(Cocoa)の上移動のキーバインドとかぶっているため非常に…

MovableTypeに投稿

30分プログラム、その58。PythonでMovableTypeに投稿してみよう。 # -*- coding: utf-8 -*- import xmlrpclib class MovableType: def __init__(self,id,user,passwd): self.id = id self.user = user self.passwd = passwd self.server = xmlrpclib.Server(…

CreamMonkeyのGM_xmlhttpRequest

Mac

blog.8-p.info: Creammonkey 0.9CreamMonkeyのGM_xmlhttpRequestがdataを無視します。 ソースコードを修正したので、diffをどうぞ。 *** /Volumes/Creammonkey/Source/XMLHttpRequest.m 2007-06-16 23:15:29.000000000 +0900 --- XMLHttpRequest.m 2007-06-1…

CreamMonkey

Mac

Safari用のGreaseMonkey - Creammonkey:phpspot開発日誌。おおすごい。さっそくインストール。でもって、Google x はてブを使おうとしけれど、使えない。 で、ごにょごにょいじくってみる。 const宣言があった。たぶんFirefox独自の機能だろう。varに変更 do…

完全数

http://www.agusa.i.is.nagoya-u.ac.jp/person/mzp/hiki/?exerciseに書いた問題の検証用。 完全数かどうかを判定するプログラムを書け。完全数(perfect number)とは、その数字自身を除く約数(divisor)の和が、その数字自身になる数字のこと。例: 6 = 1+2+3 2…

今日のTwitter

30分プログラム、その57。TwitterとPythonで遊ぼう。今日のTwitterのログを出力してみる。 $ python twitter.py 11:32 mzp: Twitter with Pythonでなにかつくろう L:家 *p 12:35 mzp: localtimeの逆はmktime。gmtimeの逆をよこせ L:家 *p 12:35 mzp: タイム…

リストの内包表記

30分プログラム、その56。リストの内包表記 for Scheme。 実際は、40分ちょっとかかってたりする。 内包表記(list comprehension)って? 内包表記がこれであっているのかちょっと自身がないので詳しめに、動作解説をしてみる。 Haskellのやつと動作が違うよう…

ひらメソッド

ひらメソッドでPukiWikiのソースコードを読んでみよう。自分でWikiを用意してもよかったんだけど、レンタルWikiを使ってみたかったので、借りました。http://pw1.atcms.jp/mzpi/index.php?FrontPage設定ファイルのような定数や変数が大量にあるやつは非常に…

しりとり

30分プログラム、その55。http://www.agusa.i.is.nagoya-u.ac.jp/person/mzp/hiki/?exerciseより。 与えられた単語を全て1回ずつ使い、しりとりができるかどうか判定するプログラムを書け。 *Main> siritori ["ABC","CBC","CDC"] [["ABC","CBC","CDC"],["ABC…

3n+1問題

30分プログラム、その54。http://acm.uva.es/p/v1/100.html via http://www.agusa.i.is.nagoya-u.ac.jp/person/mzp/hiki/?exercise。 もし現在の値が1なら、終了する もし現在の値が偶数なら、半分にする もし現在の値が奇数なら、3倍して1を足す という操作…