2007-01-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を発掘…

whitespace

WS: (' ' | '\n' | '\t')+ { @channel = 99 };でいいのか?なんか,raccのほうが楽じゃね?と思えてきた.主にググる方面で.英語での検索能力が高ければいいのかも知れないが.空白は結局,antlrの吐き出したコードを追いかけて,それっぽそうな修正をして…

Antlr3RubyTarget

split-s: ANTLR for Ruby ここのがそのままでは動かなかったので,適当に改造calculator.g grammar Calculator; options { language = Ruby; } @init { @stack = [] } @members { def result @stack[0] end } parse: expression; expression: mult ( '+' mul…

antlr v3

>java antlr.Tool Exception in thread "main" java.lang.NoClassDefFoundError: antlr/Toolclasspathをいろいろ弄っても判らない,他のjarにもclasspathを通せというから,antlr-3.0.1.jarだけでなく,antlr-runtime-3.0.1.jar,stringtemplate-3.1b1.jar,…

2007-03-23これ今読んでるところど真ん中じゃないですか.ケミストリ?謎のやる気が出てきて,4章1節を読みなおす.なんとなく判った気になったので2節に進もう.5章ではレジスタマシンについて書かれているらしいので早く読みたい.いままでスタックマシン…

SICP4章1節を流し読みする.まったく理解できない.もちろんScheme上でSchemeインタプリタを作ろうというのは判るが,どこにフォーカスしたものか. higeponさんみたいに他の言語で実装するというのはいい考えだと思うけれど,当初の予定通りSchemeを理解す…

暫定的にSICP3章を読了したことにする.

你好世界

#!ruby -Ku require 'iconv' # 簡体字 gb2312 = ["baecb1a6caaf"].pack("H*") iconvGB2U = Iconv.new('UTF-8', 'GB2312') str = iconvGB2U.iconv(gb2312) str << iconvGB2U.iconv(nil) p str p str.unpack("H*") # => "&#32418;宝石" # => ["e7baa2e5ae9de79…

SICP3章突入.かなり怪しくなってきた.書いてあることは理解できると思うのだが,なぜこれを書くのか?という意図を30%も掴めていない気が.手続き型言語を日常的に使っている人間からしたら,なぜ代入についてここまで執拗に記述する必要があるのか. 3.3…

怠惰なSICP読み

買ったまま本棚の肥やしになっていたSICPに再挑戦してみることにした.今度は読了することだけを目指して,超手抜きで読むことにする.まずSchemeを理解しようとしない.練習問題は一つも解かない.必要そうならネットで解説を探して読むだけにする(一応,本…

構文解析(6)

現在の状態と,着目している文字列から, 現在の状態から任意の終端文字列(の状態)に到達できるか? その終端文字列に一致するか? を調べたら多少最適化できるんじゃない?と安易に考えてみたけれど,論理否定と0回以上の繰り返しがあって正しく動作しなか…

構文解析(5)

どうやらandとnotの仕様を勘違いしていたらしい.しかし,andとnotが先読みとして動作するなら,先読みじゃないandとnotはどう実装するのか?ちなみに,先読み専用のpreを定義済みなので,pre(A),pre(not(A))とすれば,本来のand(A),not(A)の挙動はエミュで…

構文解析(4)

意外と引っ張るなこのネタ.http://ja.doukaku.org/51/に挑戦してみる.最初はparseだけでなんとかしようとして,気が狂いそうになったが,こっそりrubyの回答を見て,scanがあればいいのだと知る. module Parse def scan( str, target=:target) r = [] pos…

構文解析(3)

正規表現風の記法を作って,そこから等価なルールセットを生成できれば,もう少し見やすくなる? A|B AまたはB A&B AかつB !A A以外 A-B AかつB以外 = A&!Bと等価 () 優先順位変更 . 任意の1文字 [] 文字選択 [a-c]と[abc]が等価 * 0回以上の繰り返し + 1回…

構文解析(2)

raccを使ってて使いにくいと思っていた点が,構文解析の調査を兼ねて改めてドキュメントとサンプルを読み直した結果,単に自分が使い方を知らなかっただけで,当然のごとく実装されていたことが判明.おもにパースエラーが出たときの扱い.エラーが出ないと…