3月 28th, 2008 at 12:19am |
ちょっと間が空いたけど、Schemeはやっぱり学習しておきたいし構文解析やら抽象構文木やらコンパイラの実装やらも興味が出てきたので頑張って読むよ!
1.2.3 増加の程度
計算するには資源が必要
実行時間(ステップ数)かもしんないし、メモリの量かもしんない。
フツー計算機は一定時間に計算できる量は変わらないだし。
同じことを計算するでも、アルゴリズムによって必要な資源の量(と質も)変化するのですよ
問題1.14
やべぇしばらくSICP読んでなかったから木構造なんてまったくわからん
しかしまぁ(define (cc〜〜〜のとこの最後のとこが
(+ (cc 〜〜〜) (cc 〜〜〜))
ってな感じで線形反復ではないのは明らか
よって、金額が増えると使うスペースとステップ数が増えることも明らか
で、増加の程度かぁ… わからん
解答見ちゃう
木構造は理解できるけど、答えが理解できない。
O記法とかも全然わからんので、これはせうらいへの課題としてしまふことにする。
問題 1.15
数学よくわかんない
1.2.4 べき乗
べき乗ってなんだっけ
5! = 1 * 2 * 3 * 4 * 5 → 120
こんなのか
Wikipedia見るもわからん
あってんの?ほんとあってんの? ! とか階乗じゃないの?俺頭悪くね?
PLAIN TEXT
SCHEME:
(define (expt b n)
(if (= n 0)
1
(* b (expt b (- n 1)))))
(display (expt 5 3))
で、これはΘ(n)ステップでΘ(n)スペースらしい
問題 1.14の解答からして
計算数(計算の回数?)がステップ数で
スペースは簡約しつつ計算したときに一番深くなったときのネストの深さ(日本語難しい)ってことなんだろか
よくわからないのでそこらへんに落ちてた姉御さんにべき乗を説明してもらったら
5C3とか昔やったべとか5P3とか意味のわからないことをおっしゃるのでわかりました わかりません
飴は独り占めしちゃいけませんよって言われた
線形反復だとΘ(n)ステップでΘ(1)スペースですね
でも、逐次平方だともっとスゴいよ!
bの8乗を例にとると
b * b * b [...]
Read the rest of SICP その4
3月 16th, 2008 at 11:11pm |
作った!GUIつけた!でもなんか不恰好!まぁいいや!!
FEZSNS Scraper v0.1
一応ソースもはいってるよ
Q.このソフトなに?
A.FEZのSNSから戦争データを読み込んでデータベースにするソフトだよ
Q.どういう原理なの?
A.このプログラム内にブラウザが内蔵されてて自動で
1.SNSへログイン
2.戦争リストページへアクセス (http://fesns.com/?m=fe&a=page_h_war_record_list ←コレとか)
3.戦争リストページの解析
4.戦争ページへアクセス (http://fesns.com/?m=fe&a=page_war_record&target_unit_id=2&target_seq=37564 ←コレとか)
5.戦争ページの解析
6.データベースに保存
大体こんな感じの作業をやってる
まぁ大体こんなん
あとはもう中に入ってるテキストファイル読んでって感じ
Read the rest of FEZSNS Scraper v0.1くらい
3月 12th, 2008 at 2:14am |
GUIを作れるようになりたいなぁと思った俺なのであった
フリー
ソース手動で書くんじゃなくてツールでGUI構築
多くの言語から使えると嬉しい
マルチプラットフォームだと嬉しい
ルック&フィールがOSネイティブになるべく近いといいな
開発が継続して行われてるほうが安心な気がする
そしたらwxWidgetsがいいなぁってなった
なんかサンプルコードも仰山あってすげーらしいぜ!すげー!
とりあえずRubyだとwxRubyとゆーらしい
gem install wxruby→すげー!
で、wxWidgetsはXRCっていうXML形式でのGUIの情報を取り込むことも可能らしい
VBとかC#みたく、コード上でGUIをゴリゴリ書くことも可能なんだって
コード上でゴリゴリ書く形式だと、複数言語に対応しててもデザイナがそれぞれの形式で吐けないと嬉しくないんだろうけど
XRC形式で吐けばどの言語向けのwxWidgetsでも利用可能に違いない(憶測
とりあえず使ってみるけど全然わかんねぇ…wxRuby APIとか見つつ手探り
wxRuby付属のサンプルを元に最小限で動くとこまでコードを削ってみる
PLAIN TEXT
RUBY:
#!ruby -Ku
begin
require 'wx'
rescue LoadError => e
begin
require 'rubygems'
require 'wx'
rescue LoadError
raise e
end
end
#
# Application class.
#
class XrcApp <Wx::App
def on_init
# Create a resource handler
$xml = Wx::XmlResource.get();
$xml.init_all_handlers();
# Load a resource file
xrc_file = File.join(File.dirname(__FILE__), 'test.xrc')
$xml.load(xrc_file)
[...]
Read the rest of とりあえずwxWidgetsを選んだわけ
3月 9th, 2008 at 7:25pm |
FEZSNSのを書きなおそー…となんとなく思ったのでやってみる
前回はSQL直書きだったので、今回はORマッパーのActiveRecordを使ってみる
ActiveRecordといえばRailsで有名だよね
ていうかActiveRecord以外Railsで知ってるものないよネ
テーブル定義とかをActiveRecorsに親和性高そな感じに書きなおしてみた
ActiveRecordは複合キーが使えないらしいのでコレを突っ込む
PLAIN TEXT
RUBY:
require 'rubygems'
require 'kconv'
require 'activerecord'
require 'composite_primary_keys'
class WarResult <ActiveRecord::Base
set_primary_keys :server, :war_no
end
require 'logger'
ActiveRecord::Base.logger = Logger.new("debug.log")
ActiveRecord::Base.establish_connection(
:adapter => "sqlite3",
:database => "FEZSNS.db"
)
elem = WarResult.new
elem.server = "Briah"
elem.war_no = 10000
elem.offense = "カセドリア".toutf8
elem.defense = "ゲブランド".toutf8
elem.time = "20:14"
elem.end_time = "2008-02-23 14:00"
elem.place = "ゴブリンフォーク".toutf8
elem.save
elem = WarResult.find(["Briah", 10000])
puts elem.server
puts elem.war_no
puts elem.offense
puts elem.defense
puts elem.time
puts elem.end_time
puts elem.place
すげー!
簡単!!
でも、複数テーブル対象にトランザクション作る方法がわかんない…
どーすればいいんだー
一回DBにclassっていう列作っちゃってActiveRecordがclass作っちゃって本来のclassメソッドがシャドゥイングされちゃったらしく
/var/lib/gems/1.8/gems/composite_primary_keys-0.9.92/lib/composite_primary_keys/attribute_methods.rb:62:in `method_missing': undefined method `generated_methods' for nil:NilClass (NoMethodError)
とか言われて原因気がつかなくて3時間くらいつまった!
ちきしょーばかやろー
参考
has_とかの分かりやすい解説
Read the rest of ActiveRecord
3月 6th, 2008 at 7:48pm |
今までYコンビネータってよく耳にしたけど、なんのこっちゃらよくわからなかった。
で、ひょんなことから分かりやすい解説をしてるサイトをめっけて分かったような気持ちになったからメモっておく。
Y Combinator = 不動点演算子みたいな表記をしてるサイトもあったけど、違うものだよみたいな書き方をしてるサイトもあった。
ていうか不動点て何?
http://www.loveruby.net/ja/misc/ycombinator.html
動機
再帰関数は再帰するときに自分自身を名前で呼ぶのが普通である。これをなんとかして名前を使わず、関数そのものを呼ぶようにさせたい。
らしい。
だから?って感じだけど、名前をつけなくていい→名前空間が汚れない、影響を受けないってことだし、1回しか使わないような再帰的な処理に名前なんかつけたくねーよってことなんだろー。
Schemeとかだとローカル関数とかあるしRubyだとProcとかあるし、別にYコンビネータなんかなくたっていいじゃんな気がする
けど、見た目の美しさ的にはlambda式の中にローカル関数とか書きたくないしなぁ、ってことだろか
λ式だけで再帰関数がかけます!素敵!ふーん
"Y Combinator"っていう単語なんじゃなくて、Yっていう名前がついてるCombinatorらしい
手続き名も含む「変数」がすべて束縛変数である (引数になっている) λ式のこと。そういうλ式はまわりの環境に依らずに同じ動作ができる……つまり完全に自分自身の意味が固定されている。
だって。コンビネータの動作は完全に固定されてて、引数で動作を変える(コンビネータ + λ式 = 超必殺返り値)みたいな。合体=強いという方程式がここでも成り立つ、ということかー。
http://www.loveruby.net/ja/misc/ycombinator.html
Schemeで
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/35058
Rubyで
http://d.hatena.ne.jp/amachang/20080124/1201199469
JavaScriptで
arguments.calleeって何それ めちゃめちゃかっこいいじゃん すげー便利そうじゃん JavaScript変態だな
http://d.hatena.ne.jp/tanakh/20040813
http://haskell.g.hatena.ne.jp/hyuki/20060531/factorial
Haskellで
http://ja.doukaku.org/150/
どう書く?.org の不動点演算子を各言語で実装するお題
http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/fix.html
不動点演算子について
また、SchemeのletrecやLispのlabelsとかも、 Yオペレータと役割が一緒なので不動点オペレータと呼ばれる事がある。
ほほぅ
色々な言語をちょっとっつかじってるので大体のものが読めるのは嬉しい
全然関係ないけど、嬉しさ検索、みたいなサービスが欲しいなぁ
「Y Combinator」で検索するとY Combinator使って嬉しくなっちゃった例をずらずらあげてくれるようなサービス
「Smalltalk」とか「モナド」とか「Windows Vista」とかで検索するとどうなるんだろーなー
Read the rest of Y Combinatorとは?