なにかをラップするラッパーがあるとして、 そのラッパーを経由して全ての機能を使用可能であることを機械的に確認するためには、 ラッパーの記述能力をどのくらい落せばいいか。
ラップされるものに対する入力を定義し、 それがラッパー経由の入力で全部表現できることを示せば良い?
出力に関しては、 ラップされるものからの出力をラッパー経由の出力から再現できることを示す?
分割したり場合わけしたものを組み合わせて全部表現できることを確認できるような形式... 正規表現?
khtml のコード推定は jvim のをベースとしている模様。
"\244\263\244\363\244\313\244\301\244\317" というバイト列の エンコーディングを推定して以下から選び、理由を述べよ。
参照しているアンテナ(など)のリストを出力してみる。
ふむ。LIRS はそれを生成したアンテナ自身の情報を含んでないのがちとなんだな。
RSS の link 要素から URI を取り出してリンクするようにしてみる。 これで、RSS を監視対象にした場合にいちいちリンク先を書かなくても済む。
しかし、RDF な RSS が RSS であることはどうやって判断するのが正しいのであろうか。 media type はまだ登録されてないみたいだし、 root 要素は RDF であって RSS 以外にも使われるし、 拡張子も rdf なことが多いし。
root 要素に RSS の名前空間が宣言されているかどうかってのも変だよなぁ。
ふむ。RSS であることを意識する必要が無いもしくは意識すべきでない、という見方はあるかも知れない。
nntp//rss is a Java-based bridge between RSS feeds and NNTP clients, enabling you to read your favorite RSS syndicated content within your existing NNTP newsreader.
nntp2rss - access usenet newsgroups via RSS
ポプラパレスを1話から4話まで全部読む。
これでこの作者のは全部読んだ、かな。
% google-hit 大吉 中吉 小吉 吉 末吉 凶 大凶 大吉 180000 中吉 18100 小吉 22500 吉 3390000 末吉 66800 凶 901000 大凶 32400
実際の割合との相関は?
並べ直してみる。
吉 3390000 凶 901000 大吉 180000 末吉 66800 大凶 32400 小吉 22500 中吉 18100
うぅむ。割合はともかくとして順番はあっているような。
% google-hit 東 西 南 北 東 9020000 西 12200000 南 11400000 北 13100000
世の中には東が少いらしい。
つまり...
/GothicBBB-Medium-EUC-H 20 selectfont 300 300 moveto 300 300 80 45.0 148.149606299213 arc stroke 286.259965699454 419.210785826702 moveto (北) show 300 300 moveto 300 300 80 148.149606299213 244.212598425197 arc stroke 184.753721764433 266.559076674673 moveto (西) show 300 300 moveto 300 300 80 244.212598425197 333.976377952756 arc stroke 339.25523929061 186.602353691812 moveto (南) show 300 300 moveto 300 300 80 333.976377952756 405.0 arc stroke 418.358352444131 319.781314585001 moveto (東) show showpage
こんなかんじ。
XML の namespace について調べ直す。 つまり、仕様といくつかの XML ライブラリの API を調べる。
namespace は親から継承されるので、 ある要素においてある名前の意味(名前空間)は祖先の要素の名前空間宣言に影響される。
API はこのへんをどうやってサポートしているか? とくに関数型言語で。
要素から名前空間を得るためには祖先を調べないとけないので、 その要素から親への参照が必要である。
が、関数型言語では親への参照を嫌うため、 それなりにいろいろな工夫が行われているようである。
ここで疑問が湧く: 論理型言語ではどうなのか?
さて、湧いた疑問は気にしないことにして、関数型について考える。
... そういういろいろな工夫をしなかったらどうなるだろう?
まぁ、Scheme や ML で破壊的変更を使って親への参照を実現するのは面白くも何ともないので、Haskell でやってみよう。
というわけで、(いきなり木を扱うのも何なので) 双方向リストを書いてみる。
data DoublyLinkedList = Elt Integer (Maybe DoublyLinkedList) (Maybe DoublyLinkedList) value :: DoublyLinkedList -> Integer value (Elt v _ _) = v next (Elt _ _ Nothing) = error "no next element" next (Elt _ _ (Just e)) = e prev (Elt _ Nothing _) = error "no previous element" prev (Elt _ (Just e) _) = e d1 = Elt 1 Nothing (Just d2) d2 = Elt 2 (Just d1) (Just d3) d3 = Elt 3 (Just d2) (Just d4) d4 = Elt 4 (Just d3) Nothing makelist_r n next = if n == 1 then Elt 1 Nothing next else let r = Elt n (Just (makelist_r (n-1) (Just r))) next in r makelist n = makelist_r n Nothing l10 = makelist 10
うぅむ。書けるか。
なんとなく、webrick を使って、 ブラウザからオブジェクトを眺めてみる。
#!/usr/local/bin/ruby require 'pp' require 'webrick' include WEBrick s = HTTPServer.new( :Port => 2000 ) class ObjectServlet < HTTPServlet::AbstractServlet def do_GET(req, res) res['Content-Type'] = "text/html" case q = req.query_string when /\A\d+\z/ id = q.to_i begin obj = ObjectSpace._id2ref(id) res.body = page_object(obj) rescue RangeError res.body = page_no_object end when nil res.body = page_modules else res.body = "<html>unrecognized query: #{HTMLUtils.escape q}</html>" end end def page_modules mods = [] ObjectSpace.each_object(Module) {|mod| mods << mod } mods = mods.sort_by {|mod| mod.name } classes, modules = mods.partition {|m| Class === m } str = "" str << '<html>' str << "<h1>class list</h1>" str << "<ul>\n" classes.each {|c| str << "<li>#{object_link c}\n" } str << "</ul>\n" str << "<h1>module list</h1>" str << "<ul>\n" modules.each {|m| str << "<li>#{object_link m}\n" } str << "</ul>\n" str << '</html>' str end def self.object_link(obj) str = "<a href='.?#{obj.object_id}'>" if block_given? str << yield else str << HTMLUtils.escape(obj.inspect) end str << "</a>" end def object_link(obj) self.class.object_link(obj) end def page_object(obj) if obj.respond_to? :html_page obj.html_page else str = "" str << '<html>' str << object_link(obj.class) str << ":" << obj.object_id.to_s str << "<table border>" obj.instance_variables.sort.each {|iv| str << "<tr>" str << "<td>" << iv str << "<td>" << object_link(obj.instance_variable_get iv) } str << "</table>" str << '</html>' str end end def page_no_object "<html>no object id=#{id}</html>" end end class Hash def html_page str = '' PP.pp(self, str) <<"End" <html> <pre> #{HTMLUtils.escape(str)} </pre> End end end class Module def html_page objs = [] ObjectSpace.each_object(self) {|o| objs << o } str = '<html>' str << '<ul>' objs.each {|o| str << '<li>' str << ObjectServlet.object_link(o) } str << '</ul>' str << '</html>' str end end # mount a servlet s.mount("/", ObjectServlet) # Hit Ctrl-C to shutdown trap("INT"){ s.shutdown } s.start
さて、台風である。
レーダー画像をアニメーションさせて眺めていると、 台風の中心で雨が降っていないのは目なのでいいとして、 その外側に降っていない輪のような領域があることに気がつく。
% google-hit 台風の{目,眼,芽,女} 台風の目 27700 台風の眼 676 台風の芽 95 台風の女 1
% google-hit ブラウザ{で,な,の,が}ブラウザ ブラウザでブラウザ 52 ブラウザなブラウザ 1 ブラウザのブラウザ 151 ブラウザがブラウザ 29
xmlns は let に似ている。 名前に意味を与え、その名前は内部でのみ有効になる。
だが、抽象構文木の ADT を作るときに let の扱いを特別に支援しようと思ったことは無い。 なぜ、xmlns では支援したくなるのか?
ふと思ったのだが、unit test の setup/teardown というのは、 高階関数を扱えるならひとつで済ますことが可能なのではないだろうか。
FREQT: An implementation of FREQT (C++)
Frequent Tree Miner (tmine) は頻出する木構造パターンを効率良く抽出するためのプログラムです。(Ruby)
% google-hit {{横,縦}{形,型},{幅,深さ}優先}探索 'breadth first search' 'depth first search' 横形探索 48600 横型探索 52400 縦形探索 8160 縦型探索 9020 幅優先探索 864 深さ優先探索 950 "breadth first search" 31500 "depth first search" 56200 横形探索 + 横型探索 + 幅優先探索 = 92536 縦形探索 + 縦型探索 + 深さ優先探索 = 16953
結論: 日本語では横型探索が多く使われ、 英語では depth first search が多く使われる。
% google-hit 時間計算量 空間計算量 時間計算量 13200 空間計算量 5620
時間計算量が空間計算量よりも良くなることはあるか?
あるわけないか...
% google-hit {一,二,三,四,五,六,七,八,九}足歩行 一足歩行 3110 二足歩行 29800 三足歩行 170 四足歩行 4260 五足歩行 21 六足歩行 251 七足歩行 6 八足歩行 37 九足歩行 2
ふむ。件数を logscale にしてプロットすると、 鋸みたいな形になる。
これからみると、奇数歩行よりも偶数歩行のほうが多い。
% google-hit 奇数歩行 偶数歩行 奇数歩行 1460 偶数歩行 1310
これからみると、奇数歩行よりも偶数歩行のほうが少ない。
あ、忘れていた。一から九まででは奇数のほうが多くて不公平ではないか。
% google-hit 零足歩行 零足歩行 not-found
まぁ、影響なかったか。
ふと、AOP と comefrom の類似性について考える。
まぁ類似といっても、制御の流れの指示を書く場所と、流れの変化が起きる場所が違うというだけなのだが。
% google-hit だむだむ ぢむぢむ づむづむ でむでむ どむどむ だむだむ 820 ぢむぢむ 1 づむづむ 3 でむでむ 78 どむどむ 525
ふむ、こういうのはコマンドラインではうまくまとめられないか。
% google-hit たい焼き{,たい{,焼き}} 焼きたい{,焼き{,たい}} たい焼き 15300 たい焼きたい 13 たい焼きたい焼き 12 焼きたい 9250 焼きたい焼き 23 焼きたい焼きたい 27
The Telnet Song というのがあることを知る。
ふむ。他にあるのだろうか。
% f=(/bin/*(:t)) % google-hit 'The '${^f}' Song' |sort -n +3|tail -30 "The login Song" 1 "The ping Song" 1 "The pwd Song" 1 "The arch Song" 2 "The sync Song" 2 "The cp Song" 4 "The sed Song" 4 "The df Song" 5 "The tar Song" 5 "The dash Song" 8 "The rm Song" 8 "The mount Song" 10 "The ps Song" 11 "The sh Song" 11 "The su Song" 12 "The ls Song" 13 "The date Song" 17 "The false Song" 17 "The mt Song" 19 "The mv Song" 23 "The kill Song" 26 "The touch Song" 57 "The ash Song" 77 "The sleep Song" 105 "The echo Song" 135 "The dd Song" 296 "The more Song" 355 "The ed Song" 473 "The true Song" 546 "The cat Song" 569
% google-hit ばちばち びちびち ぶちぶち べちべち ぼちぼち ばちばち 2050 びちびち 1010 ぶちぶち 4460 べちべち 109 ぼちぼち 301000
ふと、xbomb をやってみる。 よーするにマインスイーパなのだが、 四角形だけじゃなくて三角形と六角形をサポートしているものである。
疑問:
ふと、cxhextris をやってみる。 よーするにテトリスなのだが、 四角形じゃなくて六角形なものである。
疑問:
[latest]