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

htmlの変換

http://www.thinkit.co.jp/article/74/2 http://d.hatena.ne.jp/guyon/20080528/1211986261 を見ておもしろそうだったので、やってみました><。 していること S式で表したhtmlを実際のhtmlに変換して出力する。 S式で表したhtml (define gauche-page '(htm…

(sicp40)m3.29~m3.32

途中からファイルを2つに分割した。 useが一度読み込んだファイルを再度読みこまないことに気づかなかった。 しばらく、どうして変更が反映されないんだろうと考えてしまった。 (あと、面倒だったのでutil.queueを使いました><) (use lc-module); lc-modu…

単純なメモ化ならhashを使ってもいいのかもしれない

以下のようなハッシュを作ることで、pascalの3角形の値が計算できる。 pascal = Hash.new do |h,n| if n <= 1 h[n] = [1] else h[n] = [0,*h[n-1]].zip([h[n-1],0].flatten).map{ |x,y| x + y} end end #require 'benchmark' #Benchmark.bmbm do |x| # n = 1…

shellから起動とemacsから読み込むのとでの速度の違い

計算時間がたりない 昨日のことは勘違いらしいです。コメントをもらいました。 関数の処理時間が短すぎると、実際の関数以外の部分でたくさん時間がかかる。 同じ処理を何度か繰り返したりして関数の処理時間を長くするといい。 どれくらいが十分な処理時間…

rubyとschemeでmemo(fib)

sicpでやったfibonachi数の計算のmemo化をrubyでもしてみる rubyのコード class Memoize def initialize @a = [] end def memo_fib n @a[n] = @a[n] || fib(n) end def fib n case n when 0 0 when 1 1 else fib(n-2) + fib(n-1) end end end #benchmark用 m…

(sicp37)m3.27

memo化 (define (make-table) (let ((table (cons '*table* '()))) (define (insert! key value) (let ((record (assoc key (cdr table)))) (if record (set-cdr! record value) (set-cdr! table (cons (cons key value) (cdr table)))))) (define (lookup k…

3.26

2分木のレコード keyは一つしかとれない。 こんな感じでいいのかな? (define (make-tree-table init) (let ((tree (list init '() '()))) (define (make-tree x left right) (list x left right)) (define (entry tree) (car tree)) (define (left tree) (c…

(sicp38)m3.24~m3.26

3.24 equal?以外の述語をとるようにする。 関数を受け取るようにしてみた。 (define (make-table . key) (let ((local-table (list '*table*)) (same-key? equal?)) (define (assoc key records) (cond ((null? records) #f) ((same-key? key (caar records)…

ruby1.9のirbをつかう。(メモ)

libreadline-devが必要 sudo aptitude install libreadline-dev sudo ./configure --program-suffix=1.9 && sudo make && sudo make install

sicp(sicp37)m3.23

delete-rear-queue!がなければ、次の値だけ保持するようなデータ構造でO(1)の処理ができる。 (delete-rear-queue!だけはO(N)になってしまう。) (define (make-queue) (let ((front-ptr '()) (rear-ptr '())) (define (set-front-ptr! item) (set! front-pt…

(sicp36)m3.20~m3.21

(define (front-ptr queue) (car queue)) (define (rear-ptr queue) (cdr queue)) (define (set-front-ptr! queue item) (set-car! queue item)) (define (set-rear-ptr! queue item) (set-cdr! queue item)) (define (empty-queue? queue) (null? (front-pt…

rubyで書いたプログラムをgaucheでも

gaucheの方が書きやすかったです。 処理を頭の中で分割しやすいような気がします。 (define (f seed) (define (enhance l) (map (lambda (x) (if (list? x) (enhance x) (map (cut * x <>) seed))) l)) enhance) (define (ntimes-function f n) (lambda (x) …

久しぶりにrubyで遊ぶ

rubyを始めた時に、くくを出力するプログラムを作ったりしました。 くくはこんな感じで書けると思います。 (9*9じゃないからnnかもしれません><) def kuku n (1..n).map{ |x| (1..n).map{ |y| x * y}} end kuku(2) # => [[1, 2], [2, 4]] これはn*nの要素…

graphicsモジュールで遊ぶ3

2分木。 m分木にしたい(今は2だけ) 描く方向を変えたい(今は上方向だけ) open Graphics let f x0 y0 r = let draw x y = draw_segments [|(x0, y0, x0+x, y0+y)|]in draw (-r) r; draw r r let rec g x y n r= match (n,r) with (0,_) -> () | (_,0) -> ()…

ocamlのプログラムを楽に実行できるようにする。

ocamlのプログラムを実行するには、compileが必要です。 そして、compile時に使ったモジュールのファイル名を指定しなければならないです。 例えば、こんな感じです*1。 #unixモジュールとgraphicsモジュールを使用した時 #作ったファイルの名前はtest1.ml o…

graphicsモジュールでお絵描き2

open Graphics let f n = let g x = Random.int x in let getcolor () = rgb (g 255) (g 255) (g 255) in let rec loop n = match n with 0 -> () | n -> set_color(getcolor ()); fill_circle (g (size_x ())) (g (size_y ())) (g 50); loop (n - 1) in loo…

ocamlのgraphicsモジュール

ocamlが一番絵を描くのが簡単な言語かもしれません。 標準で、絵を描くためのモジュールがついてきます。 (* draw.ml *) (* graphics.cma と unix.cmaを使う *) open Graphics let color_size = 255 let rec plot_graph x (r,g,b) n f= let rec loop (r,g,b)…