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

ラムダ計算(2)

適当にソースを整理してみた.applyの代わりに[]で適用できるようにしたり.しかし,もっと綺麗に書けると思うんだけど.ラムダ計算 - Wikipediaを参考に適当に書いただけなので,思い切り勘違いしているかも.zeroとsuccのラムダ式があれば,そこからすべて…

ラムダ計算

手で計算するのは面倒だなと思ってRambdaクラス*1を作ったら200行超えた….行列の掛け算と同じで,機械的に操作すること自体は中学生にでも出来ると思うんだけど,計算の意味がまるで理解できない.論理回路でand,or,notを組み合わせて加算器を作るとかそう…

Yコンビネータ(2)

Y Combinatorをほぼそのままrubyに書き換えただけです.ちなみに,ポール・グレアム関連でYコンビネータについて聞いたことがあるだけで,λ計算を勉強したことは無い.λ計算関連のページを検索してみるか.

Yコンビネータ

いろいろ弄っているうちに,それらしいものは出来たのだが,まだまったく理解できていない. fact = lambda {|f| lambda {|n| (n==0)? 1: n * f[n-1] }} y_combinator = lambda {|g| lambda {|f| g[ lambda {|x| f[f][x]} ]}[ lambda {|f| g[ lambda {|x| f[…

Listモナド(2)

2つの関数を繋げるだけなら,concatMapを作れば済むよな.もしかしたら同等のメソッドが標準であったりして…. class Array def concat_map( &block ); map(&block).inject([]){|c,a| c+a }; end end def expandPattern( str) expandCharClass(str).concat_m…

Listモナド

文字列を展開するメソッド2つ: def expander( str, reg1) return [str] unless str =~ reg1 r = [$1,$2,$3] yield(r[1]).inject([]) {|x,y| x << r[0]+y+r[2]} # 複数の展開対象があるかも. # 展開対象が無くなるまで再帰させる? end def expandCharClass…

1.9.0

リリースされてるのか.アーリーアダプターではないので見送り.

Maybeモナド

http://moonbase.rydia.net/mental/writings/programming/monads-in-ruby/00introduction.htmlからほぼそのままコピペ.テストコードはふつケルから. class Maybe def Maybe::unit( val ); new( true, val ); end def Maybe::nothing(); new( false, nil );…

haskellに流し目

なんだかんだいいながらも関数型言語に興味があるので,ふつうのHaskellプログラミングを読んでみた.さわりだけを扱ってるっぽくするすると読める.モナドのとこは飛ばしたけど.リストの内包表記とか数列表記,関数の部分適用とかは便利そう.とりあえず,…

第1024回 lispは本当に難しいのか問題

昔,cとかを覚えたときは,デバッグプリントを仕込みまくって挙動を確かめたり,逆アセンブルしてコードを眺めたりしていたが,lispに関しては本を読むだけで,まったく手を動かしていない.新しい概念を理解するのに時間が掛かる.本を読んでいて,ある概念…

SICP 問題 4.40

こうゆうことでいいんだろうか? def match( data, cond, &block) data.each {|x| block.call(x) if cond.call(x) } end data = [1,2,3,4,5] match( data, lambda {|x| x!=5 } ) {|baker| work = data - [baker] match( work, lambda {|x| x!=1 }) {|cooper|…

バカがいますよ

終端に到達する前に枝刈りすればいいなら,これでどうか. 1000回実行で,総当り61.891sec,早期枝刈りあり2.359sec (ちなみに条件チェックを省略した総当りバージョンは23.782sec)だった. def pseud_amb(*ar, &block) result = [] amb_impl = lambda {|a, …

SICP 4.3.2

Baker, Cooper, Fletcher, Miller, Smithは五階建てアパートの異なる階に住んでいる。Bakerは最上階には住んでいない。Cooperは最下階に住んでいない。Fletcherは最上階にも最下階にも住んでいない。MillerはCooperより上の階に住んでいる。SmithとFletcher…

SICP

もしかして,人物の名前って意味があるの?Alyssa P Hacker Ben Bitdiddle Cy D Fect (C defect?) Eva Lu Ator (evaluator) Louis Reasoner 4章にくるまで気づかなかった.

>java org.antlr.tool.Interp 文法ファイル WS トップレベル? 入力ファイルてやると,何か構文木っぽいものが出てくる.たとえば, >java org.antlr.tool.Interp SimpleC.g WS program inputならinput: char c; int x; void bar(int x); int foo(int y, char…

ANTLR3のruby版はまだASTが作れない. ↓ AST作れないなら,raccで書こうが,ANTLRで書こうが作業量的に同じくない? ↓ c用のAST作るパーサを吐き出させて,拡張ライブラリにすればいいかも? ↓ vc2005で拡張ライブラリが作れない! ↓ 大昔に買ったvc6を発掘…