<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4028011500207335385</id><updated>2012-01-04T23:33:20.900+09:00</updated><category term='essay'/><category term='alcohol'/><category term='ideology'/><category term='finance'/><category term='technical'/><category term='news'/><category term='computer'/><category term='economy'/><category term='mathematics'/><category term='governance'/><category term='technical computer'/><category term='art'/><category term='c++'/><title type='text'>埒を明ける日々</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ratiwo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>77</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-2730801213427576918</id><published>2012-01-04T23:05:00.003+09:00</published><updated>2012-01-04T23:33:20.918+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='essay'/><title type='text'>はい、おめでとう</title><content type='html'>気が付いたら2012年になってましたね、さぞかしおめでたいことでございましょう。&lt;br /&gt;&lt;br /&gt;コミケ前日からちょい体調悪かったのを"成せばなる！"の精神で押し通し、三日目撤収し打ち上げしてる段階で身体はもう限界っぽかったわけですが、帰宅したらもう完全に風邪をこじらせたみたいな具合で寝正月を満喫しました。今更ながらバリキ・ドリンクの一本や二本は飲んでおくべきだったと後悔しております。それはともかく、本年も&lt;a href="http://comfrk.info/"&gt;COMFRK&lt;/a&gt;をよろしくお願い申し上げます。&lt;br /&gt;VOL.3の在庫はしばらくありませんがVOL.2は未だかなりありますよ。&lt;br /&gt;&lt;br /&gt;床に伏しているだけなら本も読めようものですが、文字通り寝てたので去年の積読書も手に着かず…やろうと思ったことも出来ず、万事の前提にまず健康ありきと痛感した次第…&lt;br /&gt;皆さん本当に健康に生きましょうね。&lt;br /&gt;&lt;br /&gt;未だ"完全復活！(CV:玄田哲章)"ではないですが、明日から仕事だし、新年のご挨拶だけでも、と。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-2730801213427576918?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=2730801213427576918' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2730801213427576918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2730801213427576918'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2012/01/blog-post.html' title='はい、おめでとう'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-6221586974209683836</id><published>2011-12-29T11:35:00.003+09:00</published><updated>2011-12-29T11:49:04.462+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='essay'/><title type='text'>COMFRK VOL.3 Advent Calendar 3</title><content type='html'>今年はこれでおしまいだからって、まだまだCOMFRKは終わりません。&lt;br /&gt;だからこれは&lt;a href="http://atnd.org/events/23201"&gt;COMFRK VOL.3 Advent Calendar&lt;/a&gt;の記事。&lt;br /&gt;&lt;br /&gt;みなさんエミュレータとシミュレータの区別は付きますか？&lt;br /&gt;&lt;a href="http://www.emulator-zone.com/"&gt;こっち&lt;/a&gt;がエミュレータで、&lt;a href="http://www.icfd.co.jp/"&gt;こっち&lt;/a&gt;はシミュレータです。計算機のエミュレータはよく見掛けますが、計算機のシミュレータはどうでしょう？&lt;a href="http://www.youtube.com/watch?v=ZiRgYBHoAoU"&gt;これ&lt;/a&gt;とかがそうですね。&lt;br /&gt;&lt;br /&gt;COMFRKも毎回記事集めやネタ出しに苦労しているので、今回から連載を始めることにしました。連載を通しての題材は、そう計算機のシミュレータを作っていこう！です。これはその一回目。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-6221586974209683836?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=6221586974209683836' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6221586974209683836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6221586974209683836'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2011/12/comfrk-vol3-advent-calendar-3.html' title='COMFRK VOL.3 Advent Calendar 3'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-7764452495049275047</id><published>2011-12-29T11:18:00.002+09:00</published><updated>2011-12-29T11:35:16.267+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='essay'/><title type='text'>COMFRK VOL.3 Advent Calendar 2</title><content type='html'>忘れてたわけじゃないけれど、忘れていることを忘れていただけです。&lt;br /&gt;だからこれは&lt;a href="http://atnd.org/events/23201"&gt;COMFRK VOL.3 Advent Calendar&lt;/a&gt;の記事。&lt;br /&gt;&lt;br /&gt;プログラマは大きく分けてREALな型とINTEGERな型に分けられるのは皆さんよくご存知ですね？INTEGERなプログラミングと比較してREALな方は泥くさい部分が少なくありません。もちろん両者は互いに手を取り合うべき存在なわけですが、ことREALな方は計算機の上で論理的に考えるよりも、黒板の前で筋肉を弾ませることを好むため、なかなか上手くいきません。&lt;br /&gt;そんなREALなプログラミングの四方山話…&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-7764452495049275047?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=7764452495049275047' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/7764452495049275047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/7764452495049275047'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2011/12/comfrk-vol3-advent-calendar-2.html' title='COMFRK VOL.3 Advent Calendar 2'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-3765726534308006621</id><published>2011-12-25T20:25:00.002+09:00</published><updated>2011-12-25T20:52:34.443+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='essay'/><title type='text'>COMFRK VOL. 3 Advent Calendar</title><content type='html'>今年は出ないかと思われた(思った)COMFRKですが、出る(出す)ようです。&lt;br /&gt;だからこれは&lt;a href="http://atnd.org/events/23201"&gt;COMFRK VOL.3 Advent Calendar&lt;/a&gt;の記事。&lt;br /&gt;&lt;br /&gt;突然ですが&lt;a href="http://atnd.org/events/23413"&gt;Prolog復興会議準備会&lt;/a&gt;というイベントがあります！&lt;br /&gt;&lt;a href="http://twitter.com/TakaoOzaki"&gt;twitter-id: TakaoOzaki=サン&lt;/a&gt;というPrologに対し並々ならぬ愛情をお持ち(のように見受けられる)方が主催で、&lt;a href="http://twitter.com/Nikoriks"&gt;twitter-id: Nikoriks=サン&lt;/a&gt;というこれまたPrologに対して&lt;a href="http://www.kprolog.com/index.html"&gt;多大な貢献&lt;/a&gt;をされている方もいらっしゃるようです。Prologに関心があれば参加して損は無いんじゃないかしら？&lt;br /&gt;&lt;br /&gt;ところで皆=サンにとってProlog=サンって何でしょうか？たぶん多くの人にとって思うようにならないニクい奴って感じなんじゃないですか？僕は一時期ですが真面目な交際をしていました。結局この関係は長続きせず、今はまあ友達以上、恋人未満、むしろ友達です。そもそも僕が講義をサボっていたら偶然出会った先輩、それがProlog=サンなんです。青春ですね。&lt;br /&gt;&lt;br /&gt;そんなProlog=サンの良い面や可能性を集めてファンブックを作ろうかと思ったんですが、そういうペーパーはかつて山のように書かれていたし今更おもしろく無いなと気付きました。だから今回は、ちょっと気恥しいんだけどProlog=サンと僕の思い出について書いてみます。青臭いです。正直なところ書くのが辛い。だけど僕はもう大人なんだから一度ケリを着けなきゃいけない…、そう考えて突き通しました。&lt;br /&gt;&lt;br /&gt;というわけでCOMFRK VOL.3ではPrologと僕の青春の何ページかを書きます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-3765726534308006621?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=3765726534308006621' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3765726534308006621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3765726534308006621'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2011/12/comfrk-vol-3-advent-calendar.html' title='COMFRK VOL. 3 Advent Calendar'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-4528867019421737074</id><published>2011-11-09T18:23:00.004+09:00</published><updated>2011-11-09T18:34:40.222+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='essay'/><title type='text'>ぼくがかんがえたさいきょうの10さつ</title><content type='html'>&lt;a href="https://twitter.com/natsutan"&gt;@natsutanさん&lt;/a&gt;が&lt;a href="https://twitter.com/#!/natsutan/status/134091542364299264"&gt;言ってた&lt;/a&gt;から考えました。数値計算篇。&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://www.amazon.co.jp/dp/4320013433/"&gt;数値計算の常識&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;計算機の小数点と数学の実数は全く別物だということを忘れがち。&lt;br /&gt;また所詮近似だからと言って誤差が野放しだと思っても大間違い。&lt;br /&gt;過大評価も過少評価もいけません。&lt;br /&gt;本当の数値計算のはなしをしよう..&lt;br /&gt;&lt;br /&gt;2. &lt;a href="http://hp15c.org/hp15cAdvanced.pdf"&gt;HP-15C Advanced Functions Handbook&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;基本を押さえたら実践、の前に歴史から学ぼう。&lt;br /&gt;HP-15Cという古の名機を手に、限られた資源の使い方を知る。&lt;br /&gt;ちなみにこっちが&lt;a href="http://hp15c.org/hp15c.pdf"&gt;本機のマニュアル&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;3. &lt;a href="http://www.amazon.co.jp/dp/0199601429/"&gt;Modern Fortran Explained&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;過去だけに囚われていては人類は進歩しない！&lt;br /&gt;現代を生きよう、これが明日から諸君の武器となる。&lt;br /&gt;Fortran2008に準拠した言語詳説。&lt;br /&gt;配列演算も演算子オーバーロードもローカルビューもアリだ。&lt;br /&gt;&lt;br /&gt;4. &lt;a href="http://www.amazon.co.jp/dp/4621031171/"&gt;Fortran 77 応用ソフトウェア作成技法&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;これで準備は整った、戦争だ！と思った貴様は甘い！！&lt;br /&gt;何故この時代にFortranがあるのかを少しは考えてみろ。&lt;br /&gt;過去の遺産があるから仕方無くに決まってるだろうが！&lt;br /&gt;静的解析が容易？Cと比較すればそうだろう..&lt;br /&gt;だがな！だったらどうして強い型付けの関数型言語でない？&lt;br /&gt;諸君の仕事がたとえ現代兵器でなされようとも、&lt;br /&gt;戦場は弓矢や落とし穴といったベトコン仕込みの罠で一杯だ。&lt;br /&gt;だからリストやツリーのデータ構造がどう定義出来るかなんて話じゃなく、&lt;br /&gt;どうDOするのかってことを身体で憶えるんだ。&lt;br /&gt;&lt;br /&gt;5. &lt;a href="http://www.amazon.co.jp/dp/1441931996/"&gt;Theoretical Numerical Analysis&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;悪い兵士は居ない。居るのは馬鹿な指揮官だ。&lt;br /&gt;武器や技術が幾ら凄かろうと正しい判断が伴わなければ無意味だ。&lt;br /&gt;生き残りたければ各自が有能な指揮官となって戦わねばならん！&lt;br /&gt;プログラムの意味論が領域理論やラムダ計算を基礎とするように、&lt;br /&gt;数値計算もまた線形代数と関数空間を基礎としていることを知れ。&lt;br /&gt;&lt;br /&gt;6. &lt;a href="http://www.amazon.co.jp/dp/0898714281/"&gt;Numerical High Performance Computers&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ようこそ戦場へ！！だがまだここは前線じゃない。&lt;br /&gt;諸君にはこれより奥地の湿地帯で展開している部隊に物資を届けてもらう。&lt;br /&gt;まずは我々がこれまでどのようにこの地で戦ってきたかを知ってもらおう。&lt;br /&gt;&lt;br /&gt;7. &lt;a href="http://www.amazon.co.jp/dp/0898715342/"&gt;Iterative Methods for Sparse Linear Systems&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ヒーホー撃てば当たるぜ！！ここじゃあ何でもヤったモン勝ちよお！&lt;br /&gt;新しい関数系や補間法、補空間なんでも構わねぇ、試せばザッツライト。&lt;br /&gt;大体は何かに当たるからそれでオールクリアだ畜生めっ！！&lt;br /&gt;&lt;br /&gt;8. &lt;a href="http://www.amazon.co.jp/dp/0898716136/"&gt;Direct Methods for Sparse Linear Systems&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;よくここまで辿り着いたな、物資は確かに受け取った。礼を言うぞ。&lt;br /&gt;諸君の勇気をたたえ、ここは一つとっておきの武器をくれてやろう。&lt;br /&gt;コイツを使えば原理的にはどんな敵も倒せる、計算機が十分タフならな。&lt;br /&gt;後方の奴らはこんなもん使えないとほざきやがるがそんなことはない。&lt;br /&gt;コイツこそが使えるんだ！上手く使えば幾らだって速くなる！&lt;br /&gt;では敵地に単独潜入している人物にこの封筒を届けてくれ。検討を祈る。&lt;br /&gt;&lt;br /&gt;9. &lt;a href="http://www.amazon.co.jp/dp/0898719909/"&gt;Graph Algorithms in the Language of Linear Algebra&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;オットあぶないぜ兄ちゃん、もう一歩で竹ヤリが飛び出してくらぁ。&lt;br /&gt;ここは四方敵だらけの未踏の地さ、味方は他にゃあ居ないぜ。&lt;br /&gt;フムなるほど、情報ありがとよ。&lt;br /&gt;礼と言っちゃあなんだが、ここで知ったことを教えるよ。&lt;br /&gt;グラフを線形代数で考えるんだ。&lt;br /&gt;場合によっちゃあ必要なメモリサイズやアクセスパターンが分かる。&lt;br /&gt;いつか役に立つかも知れねぇよ。&lt;br /&gt;&lt;br /&gt;10. &lt;a href="http://www.amazon.co.jp/dp/4087203956/"&gt;スーパーコンピュータを20万円で創る&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;そして伝説へ..&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;どうしてこうなった？&lt;br /&gt;もっとFEMとか流行の粒子法とか方法論をカバーすれば良かったかも。&lt;br /&gt;あと数値計算で大事な非線形へのアプローチとか。&lt;br /&gt;数値計算と言えばNumerical Recipesも原著3版は良くなってるらしいです。&lt;br /&gt;ただ個人的にああいったカタログみたいなの薦めるのは気が引けます。&lt;br /&gt;基礎を知らないと、式を追ったところでよく分からないと思うので。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-4528867019421737074?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=4528867019421737074' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/4528867019421737074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/4528867019421737074'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2011/11/10.html' title='ぼくがかんがえたさいきょうの10さつ'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-6997027938344026394</id><published>2011-08-04T09:23:00.004+09:00</published><updated>2011-08-04T09:41:27.747+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical computer'/><title type='text'>Realtek8192se on Linux 2.6.40-</title><content type='html'>Kernelアップデートしたら蟹のWirelessドライバが刺さった。&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Timing_Synchronization_Function_(TSF)"&gt;TSFタイムスタンプ&lt;/a&gt;をMPDU(MAC Protocol Data Unit)の先頭で与える事を示すためにRX_FLAG_TSFTを使っているのが(意図が不明瞭で)ダメらしい。これはRX_FLAG_MACTIME_MPDUに置き換えなさいとのこと。&lt;br /&gt;&lt;br /&gt;以上のことは別に最近の話では無いみたいだけどRealtekにあるドライバには反映されていない。少くとも8192seは。まぁすぐに修正されるだろうけど。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-6997027938344026394?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=6997027938344026394' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6997027938344026394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6997027938344026394'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2011/08/realtek8192se-on-linux-2640.html' title='Realtek8192se on Linux 2.6.40-'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-1425648428611135823</id><published>2011-02-13T16:47:00.002+09:00</published><updated>2011-02-13T16:50:20.284+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><title type='text'>COMFRK FREE DL</title><content type='html'>vol. 2が出たらvol. 1は公開しますと宣言しましたが今まで遅れて後悔しています。&lt;br /&gt;宣言があっても実装が違うというリアルが現実を浸食した!!&lt;br /&gt;&lt;a href="http://comfrk.info/arch/vol1.pdf"&gt;COMFRK VOL. 1&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-1425648428611135823?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=1425648428611135823' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/1425648428611135823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/1425648428611135823'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2011/02/comfrk-free-dl.html' title='COMFRK FREE DL'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-1482293058704214163</id><published>2011-02-03T09:37:00.003+09:00</published><updated>2011-02-03T17:22:53.685+09:00</updated><title type='text'>NAMIKI 2</title><content type='html'>&lt;table&gt;&lt;tr&gt;&lt;th&gt;6&lt;/th&gt;&lt;td&gt;27&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;7&lt;/th&gt;&lt;td&gt;12 27 42 47&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;8&lt;/th&gt;&lt;td&gt;10 10 27 40 42 54&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;9&lt;/th&gt;&lt;td&gt;27 57&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;10&lt;/th&gt;&lt;td&gt;42&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;11&lt;/th&gt;&lt;td&gt;17 42&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;12&lt;/th&gt;&lt;td&gt;17 42&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;13&lt;/th&gt;&lt;td&gt;17 42&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;14&lt;/th&gt;&lt;td&gt;17 52&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;15&lt;/th&gt;&lt;td&gt;17 33 42&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;16&lt;/th&gt;&lt;td&gt;17 42 42&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;17&lt;/th&gt;&lt;td&gt;17 42&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;18&lt;/th&gt;&lt;td&gt;17 37 57&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;19&lt;/th&gt;&lt;td&gt;14 22 37&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;20&lt;/th&gt;&lt;td&gt;07 22 47&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;21&lt;/th&gt;&lt;td&gt;12 42&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;22&lt;/th&gt;&lt;td&gt;07 32&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-1482293058704214163?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=1482293058704214163' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/1482293058704214163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/1482293058704214163'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2011/02/namiki-2.html' title='NAMIKI 2'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-2420948830886832140</id><published>2010-12-29T21:44:00.007+09:00</published><updated>2011-01-04T16:49:42.832+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><title type='text'>この先生きのこるTLS</title><content type='html'>&lt;a href="http://atnd.org/events/10573"&gt;C++ Advent Calendar jp 2010&lt;/a&gt;の記事です。&lt;br /&gt;&lt;br /&gt;並列性の導入に伴うメモリモデルの変更についてCryoliteさんが&lt;a href="http://d.hatena.ne.jp/Cryolite/20101228#p1"&gt;丁寧な説明&lt;/a&gt;を書いてくれてますから是非読みましょう。時代は並列です。それもマルチホストやマルチノードではなくて、共有メモリ型のマルチプロセッサ(マルチコア)です。ふらっと電器店に入ったパウリ体質の親父さんが4-core(論理)マシンを数万円で手に入れてしまえるわけですから、並列性を考えてプログラミングしないわけがありません。&lt;br /&gt;&lt;br /&gt;ところで並列ってどうして必要なんですか？パフォーマンスです。一口にパフォーマンスと言ってもMan-Machine Interactionの応答パフォーマンスから、CAEシミュレーションや健康診断の結果待ちまで色々なものがありますが、回路の遊び時間を減らし、処理の待ちを減らそうというのが基本的なモチベーションです。&lt;br /&gt;&lt;br /&gt;だからおまえはまずlock-freeな実装を考えるんだ!待たせるな!!そういうわけで&lt;a href="http://d.hatena.ne.jp/bsdhouse/20101219/1292772137"&gt;yamasaさんの記事&lt;/a&gt;を読みましょう。&lt;br /&gt;&lt;br /&gt;それで僕です。みんなちょっと待て、C++0xで明日の生活を支えることは難しいぞ。だから今日は、昨日から使えていたC++0xの機能Thread-Local Storage(以下TLS)のお話です。&lt;br /&gt;&lt;br /&gt;まずTLSって何かと言うと、スレッド毎に個別に持ってるストレージです、まんまだけど。コレどうして要るのかって言うと、スレッド毎にスタックがあるんだからソッチで持ってよ!!とかそういう単純な話です。&lt;br /&gt;&lt;em&gt;「おいィ？メモリ空間共有してるのがスレッドのメリットだろ。&lt;br /&gt;　なんでプロセスみたいな事するんだ!？」&lt;/em&gt;&lt;br /&gt;それは一理あるんですけれど残り九十九理はないですね。おまえはコピー持つなら必ずフォークするのかとかそういう。で、使い方なんですけどとても簡単です。TLSとして扱いたいデータ(PODに限る)に thread_local と付けるだけです。&lt;pre&gt;&lt;code&gt;thread_local int x; // おまえはスレッド毎に保持される&lt;/code&gt;&lt;/pre&gt;ちょっと注意しておかないといけないのは、初期化忘れたら怖いよ？泣くよ？ということです。&lt;del&gt;あとまあPODじゃないと困るとかいうのは、それこそ&lt;/del&gt;Cryoliteさんの記事よく読みましょう。&lt;br /&gt;&lt;br /&gt;ちなみにC++0xではthread_localですけど、大抵の処理系で以前からサポートされています。&lt;em&gt;!!yamasa さんから指摘頂きましたが、C++0x以降はPODでない変数もTLSとなる(&lt;a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3225.pdf"&gt;N3225&lt;/a&gt; 3.7.2 Thread storage duration参照)ので以下の内容はC++0x以前の話です。!!&lt;/em&gt;&lt;br /&gt;&lt;pre&gt;+--------------------+--------------------+--------------------+&lt;br /&gt;|      GNU/Sun       |      Intel/MS      |        C++0x       |&lt;br /&gt;+--------------------+--------------------+--------------------+&lt;br /&gt;|           __thread | __declspec(thread) |       thread_local |&lt;br /&gt;+--------------------+--------------------+--------------------+&lt;/pre&gt;&lt;br /&gt;それで実際(僕が)よく見るケースなんですけど、こんな感じのコードがあって..&lt;br /&gt;&lt;pre&gt;&lt;code&gt;void func(int a) {&lt;br /&gt;    static Hoge hoge;&lt;br /&gt;    // 以下、数百行のナンバークランチが続く&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;これでfuncのcallerをOpenMP化したい時とか困りますよね。しかもfuncが1つや2つじゃなくていーっぱいあると、ほんとヤダなーって感じです。でもhogeはPODじゃないんで&lt;em&gt;(!!C++0x以前だと!!)&lt;/em&gt;TLS化出来ないんですよ。かと言ってhogeを触ってるところ全てでlockしてたらヤバい、遅くて死ぬ。しかし並列版funcを用意する気がとても起きない(or優先順位が低い)。そんな時はこうすると良いですね。&lt;br /&gt;&lt;pre&gt;&lt;code&gt;#define hoge _hogeLocal_()&lt;br /&gt;thread_local Hoge *gl_hoge = static_cast&amp;lt;Hoge *&amp;gt;(0);&lt;br /&gt;Hoge &amp;_hogeLocal_() {&lt;br /&gt;    if (!gl_hoge) {&lt;br /&gt;        // LOCKしてnew&lt;br /&gt;    }&lt;br /&gt;    return *gl_hoge;&lt;br /&gt;}&lt;br /&gt;void func(int a) {&lt;br /&gt;    //static Hoge hoge;&lt;br /&gt;    // 以下、コードは弄らない&lt;br /&gt;}&lt;br /&gt;#undef hoge&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;まあ別に面白いコードでも何でも無い。だがこれでこの先生きのこることができる。精々明後日までだろうが..&lt;br /&gt;&lt;br /&gt;ところでこれからのクラス設計という観点では&lt;a href="http://d.hatena.ne.jp/coiledcoil/20101224/1293186441"&gt;coiledcoilさんの記事&lt;/a&gt;など参考になりますね、読みましょう。&lt;em&gt;!!それからC++0xでTLSばんじゃ〜いしても、コンストラクタにロックなんて無いから安心して心配しろ、泣くぞ(3.6.2 Initialization of non-local variables参照)!!&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;それでは次の方、良いお年を。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-2420948830886832140?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=2420948830886832140' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2420948830886832140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2420948830886832140'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2010/12/tls.html' title='この先生きのこるTLS'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-3832955582842221570</id><published>2010-12-26T21:14:00.004+09:00</published><updated>2010-12-26T21:35:54.946+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><title type='text'>COMFRK vol. 2</title><content type='html'>夏に引き続き冬も出しマス、そういうマスが発見されました。&lt;br /&gt;&lt;pre&gt;名前: COMFRK&lt;br /&gt;日時: 12/31(金) 三日目&lt;br /&gt;場所: 東ヘ51a&lt;br /&gt;内容: 新刊 COMFRK vol. 2&lt;br /&gt;      既刊 COMFRK vol. 1&lt;br /&gt;価格: 各300円&lt;/pre&gt;新刊の内容は..&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Prologressive Meta-ル by m0h1can&lt;/li&gt;&lt;br /&gt;&lt;li&gt;なれる!?C++0x PG ～ムーブセマンティクス編～ by lyrical logical&lt;/li&gt;&lt;br /&gt;&lt;li&gt;至極簡単なメモリプール by cubicdaiya&lt;/li&gt;&lt;br /&gt;&lt;li&gt;型理論におけるパラドクス by ranha&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ATiの職人技が現代に息衝くこだわりGPGPU by m0h1can&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Game Seeker vol. 1&amp;2 by mascalade&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;を予定していますが、まだ編集を終えてないので必死です。&lt;br /&gt;&lt;br /&gt;なお既刊はデジタル版(PDF)を &lt;a href="http://comfrk.info/"&gt;COMFRK&lt;/a&gt; にて無料公開します。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-3832955582842221570?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=3832955582842221570' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3832955582842221570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3832955582842221570'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2010/12/comfrk-vol-2.html' title='COMFRK vol. 2'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-3076315649054203032</id><published>2010-12-08T00:44:00.005+09:00</published><updated>2010-12-08T01:25:47.812+09:00</updated><title type='text'>プログラマが予約しておくべき本10冊</title><content type='html'>未だ無い本だからテキトーな事が書ける。大天才！&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://oreilly.com/catalog/9781593272838/"&gt;Learn You a Haskell for Great Good!&lt;/a&gt;&lt;/li&gt;なんか表紙とタイトルがイカす。&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/dp/0199601429/"&gt;Modern Fortran Explained&lt;/a&gt;&lt;/li&gt;今なお進化を続ける太古の言語Fortran.. その最新仕様2008を網羅する一冊！&lt;br /&gt;&lt;li&gt;The C++ Programming Language 4th&lt;/li&gt;C++0x。&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/dp/0321417461/"&gt;PROLOG programming for Artificial Intelligence 4th&lt;/a&gt;&lt;/li&gt;Common LispでPrologを書くAI本はあるけど、PrologのAI本はまた違った味わいが.. 待望の最新版！&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/143982536X/"&gt;Scientific Computing with Multicore and Accelerators&lt;/a&gt;&lt;/li&gt;安心のドンガラ印。&lt;br /&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming#Detailed_outline_of_unpublished_Volume_4"&gt;TAOCP vol.4&lt;/a&gt;&lt;/li&gt;チャールズ・ストロスの小説だとTAOCPの四巻は永遠に(公には)出ないことになってたけど分冊出てるな。&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/dp/0521718201/"&gt;Finite and Algorithmic Model Theory&lt;/a&gt;&lt;/li&gt;有限モデル理論をアルゴリズムに応用云々と言えば…そうNP問題のアノ論文。&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.jp/gp/product/4774145211/"&gt;プロセッサを支える技術&lt;/a&gt;&lt;/li&gt;安心のHisa Ando印。&lt;br /&gt;&lt;li&gt;丸ごと型理論の本&lt;/li&gt;誰かが書くハズ。&lt;br /&gt;&lt;li&gt;&lt;a href="http://comfrk.info/"&gt;COMFRK vol. 2&lt;/a&gt;&lt;/li&gt;がんばって書く。&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;…まあつまり、自分が読みたい本のリストってことだ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-3076315649054203032?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=3076315649054203032' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3076315649054203032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3076315649054203032'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2010/12/10.html' title='プログラマが予約しておくべき本10冊'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-6626468435947413122</id><published>2010-08-30T21:41:00.002+09:00</published><updated>2010-08-30T21:53:44.048+09:00</updated><title type='text'>COMFRKはKindleでも読めます！</title><content type='html'>&lt;img src="http://comfrk.info/img/misc/comfrk_on_kindle.jpg" alt="comfrk_on_kindle" /&gt;&lt;br /&gt;&lt;br /&gt;Kindle向けに組版しないと壊滅的な読み辛さってことは分かった。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-6626468435947413122?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=6626468435947413122' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6626468435947413122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6626468435947413122'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2010/08/comfrkkindle.html' title='COMFRKはKindleでも読めます！'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-4144829320762025018</id><published>2010-08-29T21:46:00.003+09:00</published><updated>2010-08-29T22:19:15.782+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><title type='text'>C78おつかれさまでした</title><content type='html'>&lt;a href="http://comfrk.info"&gt;http://comfrk.info/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ギリギリまで仕事で、学部時代の実験レポートを思い出させる過酷な作業の末、関係各位の協力によって前日の夜八時頃に無事製本を終えた50部の創刊号たちは、この訳が分からない雑誌だれ得ですか？という予想とは裏腹に、午後1時を待たずして完売してしまうという…&lt;br /&gt;&lt;br /&gt;次は既刊とVOL.2を予定しておりますのでよろしくお願いします。&lt;br /&gt;&lt;br /&gt;VOL.2予告&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;エヴェレット解釈によると、我々の宇宙と平行してC++0xの別の仕様が存在するという…。そこではConceptが生き残っていた！？&lt;/li&gt;&lt;br /&gt;&lt;li&gt;メタプログラミングRubyという本が売れているそうなので、メタプログラミングPrologという本も売れるんじゃないですかね？&lt;/li&gt;&lt;br /&gt;&lt;li&gt;???&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;あと執筆者は随時募集しております。巻頭漫画の枠がまだ空いているので漫画が描ける人を強く希望します！！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-4144829320762025018?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=4144829320762025018' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/4144829320762025018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/4144829320762025018'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2010/08/c78.html' title='C78おつかれさまでした'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-859767742991292453</id><published>2010-08-01T21:31:00.006+09:00</published><updated>2010-08-29T21:46:09.481+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><title type='text'>COMFRK vol. 1</title><content type='html'>紆余曲折あって今年は転職した私ですが、それとは何の関係も無くC78にサークル参加します。既に売り子は確保出来て&lt;s&gt;います&lt;/s&gt;いませんが、コスプレして手伝いたいというヴァーチャルな方がおられましたら &lt;a href="http://twitter.com/m0h1can"&gt;twitter-id: m0h1can&lt;/a&gt; までDM下さい。&lt;br /&gt;&lt;br /&gt;名前: COMFRK&lt;br /&gt;日時: 8/14(土) 二日目&lt;br /&gt;場所: 東ア47a&lt;br /&gt;内容: 雑誌1部 COMFRK vol. 1&lt;br /&gt;価格: 300円&lt;br /&gt;&lt;br /&gt;何気にまだ確定してない記事があって編集長としては心穏やかではないのですが、少くとも創刊号が落ちることは無さそうです…&lt;br /&gt;&lt;br /&gt;1. 夏休み子供λ相談室 by ranha&lt;br /&gt;2. Haskellコミュニティ探訪 - 処理系とライブラリを中心にして - by shelarcy&lt;br /&gt;3. 差分のアルゴリズム by cubicdaiya&lt;br /&gt;4. メインメモリアクセスマニュアル by nish&lt;br /&gt;5. C++0xの空、Variadic Templatesの夏 by lyrical logical&lt;br /&gt;6. PrologでSchemeの操作的意味論を実装 by zick&lt;br /&gt;7. ゲームオーバーのすゝめ by mascalade&lt;br /&gt;&lt;br /&gt;当日はranhaさんがウェイトリー家に生まれた双子の子供のうち異次元の血が濃い方のコスプレをするそうなので、深きものどもとか来ると良いよ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-859767742991292453?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=859767742991292453' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/859767742991292453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/859767742991292453'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2010/08/comfrk-vol-1.html' title='COMFRK vol. 1'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-8009812771538287884</id><published>2009-12-31T20:44:00.003+09:00</published><updated>2009-12-31T20:57:59.566+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='essay'/><title type='text'>The End of 2009</title><content type='html'>コミケから帰ってきて身体がクタクタだし大掃除が出来なかったしお腹へったしシュタインズゲートをやれなかったしロクでもありませんね。じゃあ今年は何がロクだったかなと振り返ってみたところ、SchwartzのDistributionやScattering Theoryが使えるようになったのは良かったなと思いますね。そして今年も佐藤超関数は理解できなかった…。とりあえず岡潔の多変数関数論を読み始めたので、来年は何とかしたい…。&lt;br /&gt;&lt;br /&gt;そうそう、今年は仕事を辞めた一年になったので、来年は仕事を始めた一年になると良いですね。欲を言えば、仕事をせずに暮せた一年になるほうがもっと良いですけど。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-8009812771538287884?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=8009812771538287884' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/8009812771538287884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/8009812771538287884'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2009/12/end-of-2009.html' title='The End of 2009'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-4891555078332024726</id><published>2009-12-27T18:23:00.002+09:00</published><updated>2009-12-27T19:24:16.529+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>Reading The Craft of Prolog</title><content type='html'>&lt;a href="http://www.amazon.co.jp/dp/0262512270/"&gt;The Craft of Prolog&lt;/a&gt;を読んでProlog的テクニックを学ぼうという集りがありました。&lt;br /&gt;&lt;a href="http://atnd.org/events/1989"&gt;高等魔術の教理と祭儀&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;当日つかった&lt;a href="http://docs.google.com/present/view?id=dckzfrp9_6f5psgffk"&gt;スライド&lt;/a&gt;です。本を読む上で道案内になれば幸いです。&lt;br /&gt;&lt;iframe src="http://docs.google.com/present/embed?id=dckzfrp9_6f5psgffk&amp;size=m" frameborder="0" width="555" height="451"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;スライドを見ながら、あーだこーだらむだと話していると大体16時過ぎには終わってしまったので、後はかなり自由なトーキングセッションとなってしまい、ハイ、その辺は準備が不十分だったなーと痛感しています。ごめんなさい。&lt;br /&gt;&lt;br /&gt;ranhaさんが、式は戻り値ほしーと言ってましたがPrologは記号処理をしたいのであって数値計算をしたいわけじゃないのでソレです。つまり、&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;?- X = 1 + 1.&lt;br /&gt;X = 1 + 1.&lt;br /&gt;&lt;br /&gt;?- X is 1 + 1.&lt;br /&gt;X = 2.&lt;br /&gt;&lt;br /&gt;:- op(500, xfy, +).&lt;br /&gt;:- op(500, yfx, -).&lt;br /&gt;C is A + B :- prim_add(A, B, C).&lt;br /&gt;C is A - B :- prim_sub(A, B, C).&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;ということになっていて、計算の開始を指示しているのはis/2述語です。導出が始まると+-*/などの演算子はラベルのようなもので、prim_add/3述語(これは仮想的な述語ですが)のような処理系のプリミティブにぶつかると値が決まるという感じです。is/2をユーザ定義で勝手に拡張しても良い(arithmetic_function/1などで追加出来ます)のですが、実際はisp/2やism/2などユーザ側で独自なis/2述語を定義します。多項式演算ライブラリなどの実装で使われる場合が多いです。&lt;br /&gt;&lt;br /&gt;kinabaさんが穴のある構造を使ったのってもっと無いかなー、と言ってたのですが、それは僕も探しているので思い付いたら教えて欲しいです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-4891555078332024726?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=4891555078332024726' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/4891555078332024726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/4891555078332024726'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2009/12/reading-craft-of-prolog.html' title='Reading The Craft of Prolog'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-4028397014228020385</id><published>2009-12-24T00:02:00.006+09:00</published><updated>2010-01-31T00:19:01.540+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><title type='text'>筑波にお年玉あらため落とし本</title><content type='html'>筑波というガイコクには、東京国と比べるとそれは酷い生活環境を強いられる恵まれない子が沢山居ると聞きました。だから僕は、お正月になったら筑波という隣のガイコクに行って、彼等には高くて手の出せないような本を恵んで、やがて彼等が筑波を豊かな国に出来る立派なオトナになる手助けをしたいと考えました。お返しに僕は、ランランという量がやたらと多い現地の食べ物をご馳走になろうと思います。&lt;br /&gt;&lt;br /&gt;本当は部屋の本棚から本が溢れて仕方無いので本を譲りたいですが、面倒くさがり屋さんなので郵送なんかする気はありませんし、直接持って行くので欲しい人が居たら探して襲って奪って下さい。既に先約済みの本もあります。別にランランをご馳走しなく構いません。僕はオトナです。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.jp/dp/4894714515/"&gt;Effective C++ 3版&lt;/a&gt; - y_benjoさん予約済み&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.jp/dp/4894714760/"&gt;More Effective C++ 新訂版&lt;/a&gt; - y_benjoさん予約済み&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.jp/dp/0976458705/"&gt;Thinking Forth&lt;/a&gt; - Forthらしく考える本というより入門書&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.jp/dp/0898713617/"&gt;Numerical Linear Algebra&lt;/a&gt; - 線形代数じゃなくて線形ソルバの本、割りと有名な著者だと思いますが、わりと平易な本でした&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.jp/dp/4764920018/"&gt;シミュレーション物理学1 電磁気学&lt;/a&gt; - シリーズ物その1&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.jp/dp/4764920026/"&gt;シミュレーション物理学2 量子力学&lt;/a&gt; - シリーズ物その2&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.jp/dp/4764920034/"&gt;シミュレーション物理学3 力学&lt;/a&gt; - シリーズ物その3&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.jp/dp/4764920042/"&gt;シミュレーション物理学5 量子論&lt;/a&gt; - シリーズ物その5&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.jp/dp/4764920050/"&gt;シミュレーション物理学6 カオス力学入門&lt;/a&gt; - シリーズ物その6&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.jp/dp/4879999687/"&gt;モデルの理論&lt;/a&gt; - ranha さん予約済み&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.jp/dp/4879999709/"&gt;逆数学と2階算術&lt;/a&gt; - ranha さん予約済み&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.jp/dp/4563011150/"&gt;技術者のための高等数学1 常微分方程式&lt;/a&gt; - 思い出したい事があって買ったけど立ち読みで良かった…、良書ではあるので若い学生さんに&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.jp/dp/4563011177/"&gt;技術者のための高等数学3 フーリエ解析と偏微分方程式&lt;/a&gt; - 上に同じ&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.jp/dp/4563011185/"&gt;技術者のための高等数学4 複素関数論&lt;/a&gt; - 上に同じ&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.jp/dp/4563011207/"&gt;技術者のための高等数学6 最適化とグラフ理論&lt;/a&gt; - ranha さん予約済み&lt;/li&gt;&lt;br /&gt;&lt;li&gt;…また後で増えます&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;シリーズ物その4が無いのは欠品ではなくて、そもそも発刊されて無いんです！どうしてこうなった…&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;日程: 2/1(月)&lt;br /&gt;流れ: 午後に筑波に着いて、だらだら過ごして、夜RanRan食べて帰る&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-4028397014228020385?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=4028397014228020385' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/4028397014228020385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/4028397014228020385'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2009/12/blog-post.html' title='筑波にお年玉あらため落とし本'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-7620727592220067178</id><published>2009-12-23T19:17:00.003+09:00</published><updated>2009-12-24T00:02:17.497+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mathematics'/><category scheme='http://www.blogger.com/atom/ns#' term='essay'/><title type='text'>Fourier on Hilbert</title><content type='html'>&lt;a href="http://ratiwo.blogspot.com/2009/12/first-of-all-start-from-fourier.html"&gt;前回&lt;/a&gt;の続き&lt;br /&gt;&lt;br /&gt;果たしてFourierの着想は妥当なものだったのでしょうか？得られた係数&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_20.png" align="middle"&gt;と再構成された関数&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_26.png" align="middle"&gt;から、これを確認してみましょう。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_27.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;現代的な立場で言うと、これは丁度&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_21.png" align="middle"&gt;の関数に限定した場合のみ有効です。係数を求めるのに使った正弦関数は&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_22.png" align="middle"&gt;としてスケールすることで正規直交系&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_28.png" align="middle"&gt;を構成し、フーリエ級数とフーリエ係数は次のように与えられます。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_29.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;さて、Fourierはこの手法を一歩進めて次のように考えたのではないでしょうか。三角関数の周期を[0,π]に限定しなければ、より広い問題に適用できるのではないか？正弦関数による直交関係が有効であれば、余弦関数が有効な場合もあるのではないか？1807年にFourierは仏科学アカデミーに提出した論文において、積分区間[-π,π]で正弦関数と余弦関数を重ね合わせることで、関数の級数展開が可能であると述べます。つまり正規直交系として、&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_30.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;を選び、この関数が供える偶奇性&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_31.png" align="middle"&gt;を利用して、次のような展開を得たのです。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_32.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;この時、展開した係数は次で与えられます。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_33.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;ここで現代的な見通しの為に少し表示を変えることにしましょう。先の直交系は&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_34.png" align="middle"&gt;とまとめて書く事が出来ますから、直交関係は&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_35.png" align="middle"&gt;となりますね。Fourierの対応は次のように改めましょう。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_36.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;当時既にオイラーの関係式&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_37.png" align="middle"&gt;は広く知られていましたが、これを使えば先程の正規直交系は&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_38.png" align="middle"&gt;となります。直交関係はヒルベルト空間での内積を考えることで解決します。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_39.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;これで複素領域まで広げたヒルベルト空間&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_25.png" align="middle"&gt;の関数についてFourierの対応を述べることが出来ます。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_40.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;ところでFourierは熱方程式を考えていた為に正規直交系として正弦関数を発見しましたが(Fourierの研究の後にRayleighも音に関する研究から余弦関数による展開を発見しています)、他の正規直交系は無いのでしょうか？工学の分野では有限要素法などで利用する直交系にLegendre多項式があります。関数列&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_41.png" align="middle"&gt;からGram-Schmidtの方法を利用して直交した基底関数列を構成することが可能で、こうして得られた正規直交系&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_42.png" align="middle"&gt;がLegendre多項式です。直交関係は直接計算によって&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_43.png" align="middle"&gt;と確認できます。これを利用した場合にFourierの対応が有効な関数は&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_44.png" align="middle"&gt;です。&lt;br /&gt;&lt;br /&gt;to be continued..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-7620727592220067178?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=7620727592220067178' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/7620727592220067178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/7620727592220067178'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2009/12/fourier-on-hilbert.html' title='Fourier on Hilbert'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-602732924583989501</id><published>2009-12-22T04:39:00.005+09:00</published><updated>2009-12-22T17:45:56.303+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mathematics'/><category scheme='http://www.blogger.com/atom/ns#' term='essay'/><title type='text'>First of all, start from Fourier</title><content type='html'>どの時代でも、今ある場所から見渡した世界は最も優れた装いをとるに違いありません。そしてしばしば、その美しい姿に欺かれ、形式という心地良い泥濘にはまって行くのです…。ですがもし、先人が知見を得たまさにその時の感動を知ることが出来たなら、今ある知識は実存としての強度を伴い、私たちの目に映ることでしょう。数学史というのはその為の手立てだと思うのです。&lt;br /&gt;&lt;br /&gt;1807年、仏の数学者Joseph Fourierは当時目覚しい発展を続ける解析学において、とりわけ重大な、そして容易には受け入れ難い事実を発表します。フーリエ級数の発見です(有名な著書``熱の解析的理論''の発刊は1822年、Augustin-Louis Cauchyが当時の解析学の総決算と呼ぶべき著書``解析教程''をまとめたのは1821年のことです)。ヒルベルト空間に限定するなどの発想が無い当時、Fourierの手法は当然のことながら怪しげな技術として見做す数学者が多数存在しました。実際、収束性を議論していない式の項別積分に基づく彼の着想は、理論的には脆い基盤にありましたが、そういった冒険が世界を切り開いて来たことは歴史が教える通りです。&lt;br /&gt;&lt;br /&gt;それではFourierはどのようにしてこの着想に至ったのでしょうか？&lt;br /&gt;&lt;br /&gt;Fourierの取り組んでいた問題は、後の著書の題となるように熱の振舞いに関するものでした。ある均質な空間に初期状態として温度の分布が与えられたとき、任意の時間が経過すると分布はどのようになっているか？特に空間の境界に対して条件を課すことから、初期値-境界値混合問題と言われます。簡単の場合に述べますと、密度がρ、比熱をc、熱伝導率をkとする長さπの鉄棒が、時刻t=0において位置xの温度をf(x)として与えられた時、時刻0&amp;lt;tについてu(x,t)を求めよ、但しu(0,t)=u(π,t)=0とする、というものでした。ここで密度・比熱・熱伝導率を定数とし、k=cρとなるよう定めると、次のような問題となります。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_01.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;当時、常微分方程式の解法については既によく知られていた為、Fourierはまず&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_02.png" align="middle"&gt;として変数を分離した関数X(x)とT(t)に分けて考えました。これを元の偏微分方程式に代入するとことで、次のような線形斉次な微分方程式を得ます。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_03.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;両辺がそれぞれ独立した変数の関数であることから、これは定数であることが分かります。これをλとしまし。そこで関数X(x)を求めることから始めます。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_04.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;X(x)の一般解から次のようなλを求めれば良いことが分かります。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_05.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;自明な場合を除けばλは&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_06.png" align="middle"&gt;となるはずですから、オイラーの公式を使い&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_07.png" align="middle"&gt;を得ます。よってλは&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_08.png" align="middle"&gt;となり、定数は&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_09.png" align="middle"&gt;という関係にあります。関数X(x)が求まりました。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_10.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;次に、求まったλを使って関数T(t)が&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_11.png" align="middle"&gt;と求まります。以上から問題の個々の解は次の関係に従うことになります。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_12.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;ここで問題の偏微分方程式および境界条件の線形性より、任意の解の重ね合わせで元々の関数は表現出来るはずだと考えます。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_13.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;次に初期条件&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_14.png" align="middle"&gt;を考えることで、個々の解を実現する定数Cnを定める問題へと帰着することが出来ます。最終的な問題は次の通りです。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_15.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;この問題を解く為に、Fourierは初めオイラーの手法を用いてx=π/2での展開を考えます。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_16.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;ところが当時の技術ではこれによる定数の決定に困難が伴いました。またx=π/2という設定は、本来の問題を十分に満足させるものでもありません。試行錯誤の中でFourierは、両辺に&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_17.png" align="middle"&gt;をかけ、それを積分するという着想を得ます。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_18.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;正弦波の特性として&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_19.png" align="middle"&gt;という関係に注目したFourierは、この形から項別の積分を定めることが出来ると思い付いたわけです。そして次のように定数を決定しました。&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://m0h1can.sakura.ne.jp/equation/122209_20.png"&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;to be continued..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-602732924583989501?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=602732924583989501' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/602732924583989501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/602732924583989501'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2009/12/first-of-all-start-from-fourier.html' title='First of all, start from Fourier'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-8952127113131369260</id><published>2009-05-12T12:57:00.005+09:00</published><updated>2009-05-12T22:36:46.173+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='essay'/><title type='text'>Deux ou trois choses que je sais le calcul</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/ranha/20090512/1242088455"&gt;「計算」という言葉について考えてみる&lt;/a&gt;&lt;br /&gt;ranhaさんが計算とは"何か"を思索をされていて、その答えは恐らくまだ誰も分からないのだけど、計算機科学に携わる者だけでなく、およそ計算機に関わる誰もが心の中では、その"何か"を思っていることだと思う。だから私も個人的な"何か"を述べよう。&lt;br /&gt;&lt;br /&gt;"何か"って既にあるのかしら、まだ無いのかしら？という点は考える余地があると思う。既にあるのなら、私達の思索という行為は遺跡の発掘のように、文字通り「既に」あって私達の思索という領域を支配している仕掛けを見つけ出す作業に他ならない。それは個人を超えて普遍的な仕掛けだろう。だがもしまだ無いのなら、私達の思索の領域は不可逆な経験を経る事で、橋を渡るようにして別の思索の領域に到達することになる。その経験を知識や概念と呼ぶのであれば、個人の思索は死によって頂点(或いは最大不動点)に達するのだろう。いずれにしろ物理法則へと、私達の思索は漸近する。いやしかし物理法則は、現象へと漸近させていくのが科学者の使命ではないか、、この話はよそう。その"何か"が既にあるか、或いはまだ無いか、ともかく時間を超越して存在を認めよう。&lt;br /&gt;&lt;br /&gt;"何か"を語るとはどういう事か？と、自覚的に考えてみよう。その"何か"を理解する状況とはどのように可能なのか。三つ挙げてみる。&lt;br /&gt;&lt;br /&gt;一つ目は、あるsyntaxを使って構成したモデルが"何か"だと述べる状況だ。これに従えば、計算機上のプログラムはTuring完全な言語であれば書くことが可能であり、そして書かれたプログラムだけが計算なのである。つまりは、その言語の中に留まる限りにおいて牧歌的な楽園が約束される。一体なにを心配する必要があろう、"その言語"で思うがままに計算をするが良い。だがやがてサピア・ウォーフ仮説の生き証人となるであろう。たとえバイナリこそが真実だと言ったところで、事態は変わらないのである。&lt;br /&gt;&lt;br /&gt;二つ目は、syntaxと独立して"何か"が存在し、しかるべき形式でsyntaxへと埋め込まれる。従って、プログラムはその言語の構造との対応として現われる。だから私達は、ある"何か"が必ずまた別の姿形をして存在(対応)すると信じるのである。カリー・ハワード同型対応はその真理の一端である。であれば、大きな圏Cで同型対応τによる商圏C/τを考えることが"何か"への道かもしれない。&lt;br /&gt;&lt;br /&gt;三つ目は、計算は存在などしない。私達は存在しないものについて、沈黙しなければならない。一方で存在するものはただ存在し、それを指して"何か"だと述べるのだ。だから私達は何の断りもなく、対象を認め、対象への算術を認め、再帰した算術を認め、任意のNについての再帰を認め、しかし無限を認めない。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/ytb/20090324/p1"&gt;「標準的自然数の定義」占い&lt;/a&gt;&lt;br /&gt;こういったメタりっくな語り口を考えるなら、ここで挙げられている本が足掛りになるはずだ。でも幾らヘヴィにメタっても、私達が自由に使いたい"何か"との隔りは決して小さなものではないだろう。だって論理で見た代数はあまりに不恰好だから、、&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# the Group Axioms in FO&lt;br /&gt;∀x,y. ∃z. ∀w. S(x,y,w)⇔w=z&lt;br /&gt;∀x,y,z. ∃u,v. ∀w. S(x,y,u)∧S(u,z,w)∧S(y,z,v)→S(x,v,w)&lt;br /&gt;∀x. S(x,e,x)&lt;br /&gt;∀x. ∃y. S(x,y,e)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;"何か"によって私達はどう考えるのか？この答えは、あまりに私的過ぎる。論理的計算は証明プロセスを指すのであり、それはけっきょく記号操作だ(としか私は思わない)。また関数的計算も、形式がλ式であれ何であれ、やはり記号操作になる(としか私は思わない)。それらの言語"だけ"で考えている限り、それ以上の手立てを持ち合せてはいない。ところが計算する対象が見えると、舞台は関係と集合の世界に移る(だから小さな圏に限って議論すれば良いのだと云われたら、私は頷くかもしれない)。だが集合の海から関係の網を手繰り寄せることにも限界を感じるとき、チクタクと時を刻むオートマトンの世界が見えてくる。そこはもう工場のラインだ。算術回路の稼働率を上げるためにフローを組み変える日々、ふとラインの上に目をやると、流れてきたのは懐しきλ記号である、、&lt;br /&gt;&lt;br /&gt;数学的には純粋な関係である関数も、計算として私達が意識するときは操作になる。歴史を紐解けば、超関数はおろか初等関数も長きに渡り厚いベールに包まれた存在であり、それらの扱いは一つの技術だった。関数というカラクリを分解し、論理という形で純化するに至る発端はFourierにあるだろう。Fourier級数の発見は「真理を読んだ」と語る程の衝撃を持っていた。やがて収束の神秘を紐解く過程で位相の概念が生まれ、微分操作を含んだより大きなクラスの作用素が構成されて行った。佐藤幹夫はアブストラクト・ナンセンスで記述した超関数を指して「実際にも計算できるよ」と言った、それが代数解析学となった。関数空間の理論は、黒魔術だった技術を計算機で構成可能な対象へと翻訳した。ここには確かに、概念が私達の思索の領域を広げた歴史を見てとることが出来る。私達の"何か"を、或いは計算機の"何か"を、黒魔術から構成的な対象へと翻訳する概念の発見を、一体誰が否定できようか？&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.co.jp/dp/4879999709/"&gt;逆数学と二階算術&lt;/a&gt;&lt;br /&gt;ある数学的な活動を許す設定を探ることは逆数学として試みられている。いまある数学は二階算術によって十分に可能なのだそうだ(分類はもっと細かいけど)。&lt;br /&gt;&lt;br /&gt;ちなみに、この話にオチは無いのだけど、、&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-8952127113131369260?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=8952127113131369260' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/8952127113131369260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/8952127113131369260'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2009/05/deux-ou-trois-choses-que-je-sais-le.html' title='Deux ou trois choses que je sais le calcul'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-574843130427878179</id><published>2009-03-24T08:34:00.005+09:00</published><updated>2009-03-24T21:46:52.698+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='alcohol'/><title type='text'>I'M BACK..</title><content type='html'>休暇帰省のつもりが、連日ギリギリなスケジュールで疲れた。月曜は有給休暇とってたので安心して自堕落な一日を送るが、地元の風景を見た後の東京は、なんとも心が穏かでなく、電源を抜かれたアナログ回路のように出力が減衰していく感じだった、、&lt;br /&gt;&lt;br /&gt;&lt;a href="http://atnd.org/events/447"&gt;P大さ論会&lt;/a&gt;&lt;br /&gt;行ってきた。三人以上で談合するのが無理な席にまわされ、昨今の談合非難は外食産業にまで影響しているのか！と戦々恐々としたが、あの人数で入るスペースが無かっただけだった(いっそ倍の人数があれば卓を占拠出来たのに)。&lt;br /&gt;&lt;br /&gt;Nagiseさんが「昔はポリゴンを1つづつ云々」という話をしていて、そういえばラスタスキャンして描画するのに情報の持ち方や無駄描画を減らす若気の至り的アルゴリズム書いてたな等と思い出すも、つい最近も計算結果のキャッシュなどで割と似たような事をしていて進歩が無い、或いは俺って実はまだまだ若い。&lt;br /&gt;&lt;br /&gt;ikegamiさんに「モデル理論に興味を持つとは反社会的な活動家なのではないか」と詰問され、自分は元々論理学など専門じゃありませんと自白し、続いて出されたカツ丼に背を押され、D加群のようなアプローチをモデル理論でやりたかったんですと涙ながらに供述した。&lt;br /&gt;&lt;br /&gt;zickさんが「これをガ○ダムの回路に接続すれば出力性能が30%は向上する」と(マラソンで)酸素欠乏気味に旧式の携帯回路を出して来た。LISPが動いていたので、あの極貧メモリでGCを実現するとは、さすが○ニーの白い奴！と驚くも実機では未完成らしい。&lt;br /&gt;&lt;br /&gt;h_iwkさんは象なのか魚なのか分からない彫刻の向こうに居て顔が分からず、しかし公務員であらせられること、プログラマをやっているわけじゃないことを知り、この怪しげな集りに参加するという奇抜な行動力はもしや革命家を検挙するための潜入捜査か？と恐怖したものの、情報政策について考えておられるそうで安心した。そもそも俺は革命家じゃないから公安を恐れる心配は無い。&lt;br /&gt;&lt;br /&gt;alohakunさんはパートナーについて、その具合の良さだとかエコであるとかコイツなしでは駄目だとか、そんなノロケてるんだかデバッガの話なんだか分からないような事を話しておられたのでグリーンカレーを喰わせたら辛いと言っていた。喫茶店に移動後も「ワシのメモリ空間は無限大じゃあ」と豪語してデカいパフェをさらりと食べたのは驚きだった。&lt;br /&gt;&lt;br /&gt;ranhaさんは何度も「&lt;a href="http://d.hatena.ne.jp/ranha/20080510/1210348288"&gt;ピーキャッスル&lt;/a&gt;」と連呼していたように思ったが、後から検索するときにPCASLだとちっともHITしなかったので「ピーキャストル」と言っていたのかもしれない。それはともかくフルスクラッチが大好きそうだったので、きっと高級言語か何かの専用プロセッサを作ってくれるはずだ。冀わくば、それがPCASTL専用マシンではありませんように。&lt;br /&gt;&lt;br /&gt;二次会では第五世代話から言語と環境についてパネルディスカッションが行われたわけだが、"マイナー言語を流行らせるためにそのN"が応用ありきという、大型計算機の世界で何度も繰り返された結論に至ったのが何だかなのだが、MacOSX/iPhoneのObjective-CはNeXTSTEPの頃のアカデミックな運動の絡みでGCCに入っていた点が優位だったんじゃないかなと帰りに思った。つまり最終的な応用の前にやるべき事が沢山あって、それを地道にクリアしておかないと出オチするというか、、要素技術はある程度枯らして主題から降ろさないと、、&lt;br /&gt;&lt;br /&gt;Prologの理論面の話が出たような出なかったような気がするけど、CommonLispよりは理論家(の割合)が多い気がする*要出典*、というのはそれが論理を扱っているからだろうとは思う。Prologの場合、新しい拡張だとかが実装される時というのは、同時にそれを説明する理論も一緒も提案されて、それが既存の公理系で扱えるのか、扱えないならどう違うのかが説明されるから。あの場で言った真偽の順序と計算の順序を合わせたbilatticeを述語のモデルに採用し、これのproductに対する代数演算がPrologプログラムの意味論として簡単で整合性がある云々は、NAFの扱い方の"一つ"だが他にもあるわけで。あとモジュールシステムの拡張でも同じようなモデルが使えて、この時は極小モデルがいつまで安定かみたいな保証を行ったと思う。&lt;br /&gt;&lt;br /&gt;それとFortranでOOなコードを書くと遅いと言ったのは、今もそうなのか自信が無いです。単純に投入されて来た人的リソースの問題かもしれない。ただOOな作りだとプリロード命令をどこで入れると効果的かとか厄介だと思う。どれもこれもインラインという話ではないのだし、大域書換えな最適化が必要になるハズ、だと思う。それでこの下のレイヤというか命令セットの部分をどれだけ使い倒すかという話がメインの世界で、言語ってその為のディレクティブみたいなものだから、Fortressは高級だからというより焦点が合っていない感じがするのでした。数学そのままに書けるとかより、人が面倒見なくても良い塩梅になるディレクティブが欲しいとかがHPCらしい。それが出来たら次は数学っぽく書きたくはなるだろうけども。&lt;br /&gt;&lt;br /&gt;ところで不覚にも&lt;a href="http://www.amazon.co.jp/dp/4063731383/"&gt;コレ&lt;/a&gt;を完全に忘れていた、誰かPrologで同人誌にしませんか？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-574843130427878179?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=574843130427878179' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/574843130427878179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/574843130427878179'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2009/03/im-back.html' title='I&apos;M BACK..'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-6360646960475950230</id><published>2009-03-16T22:31:00.005+09:00</published><updated>2009-03-17T08:55:33.941+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>meta_predicate (1)</title><content type='html'>2009年に入ってから&lt;a href="http://www.swi-prolog.org/download/devel"&gt;SWI-Prolog&lt;/a&gt;の更新速度が凄まじい。昨年からJan Wielemakerが5.7.xをVMの設計レベルから修正しており、結果として5.6.xと比較すると格段に高速な処理系へと進化している。しかし5.7.xの真価はVMの置き換えではなく、meta_predicate及びその背後にある新しいモジュールシステムにあると言っても過言ではない。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.swi-prolog.org/pldoc/doc_for?object=section(2%2c%20%275.4%27%2c%20swi(%27%2fdoc%2fManual%2fmetapred.html%27))"&gt;Defining a meta-predicate&lt;/a&gt;&lt;br /&gt;meta_predicateを用いた柔軟なモジュールシステムは&lt;a href="http://www.sics.se/quintus/"&gt;Quintus Prolog(SICSに権利譲渡)&lt;/a&gt;に源流を求めることが出来る。その設計はPrologと非常に親和性の高い形で与えられており、既に当時からDe factoとして受け入れられたのではないかと思われる。次期ISOへの提案として&lt;a href="http://www.sju.edu/~jhodgson/wg17/doclist.html#1990"&gt;1990年のWG&lt;/a&gt;で議題に乗っており、現行の処理系を見てもコンセンサスが得られている状況だ。とは言え、Prolog産業の層の薄さの所為かどうか、正確な実装は今日に至るもそれほど多く存在しない(フリーではSWIとYAPのみ？)のも事実である。&lt;br /&gt;&lt;br /&gt;Prologの知識ベースの問題点として、名前空間の欠落が挙げられる。しかし単純に名前空間を切るだけではあまり意味が無い、単一化候補の探索領域が過少に評価される為である。今日的な言語が供える多態性やdelegate機構を実現するには、適当なシンボルについて複数の空間を結合する必要がある。Quintusの実装はこの問題に良いインターフェースを与えた。例えば汎用的なソートコード(C++で言うtemplate化されたソートアルゴリズム)と、事実ベース(C++で言う個々のクラス)ごとに比較述語(operator&amp;lt;)を別々に定義し、後からこれを結合したいとしよう。モジュールシステムを欠いたPrologでは=../2(univ演算子)とcall/1を組み併せてソートに利用する比較述語を渡してやる必要がある。事実ごとに異なる比較演算子を用意することはコードの肥大化にも繋がる。&lt;br /&gt;&lt;br /&gt;モジュールシステムのあるPrologでは、述語や演算子に対して探すべきモジュールを変数として扱うことが出来る。個々のモジュールではインターフェース相当の基本演算子や述語を上書きし、別のタイミングでこれを結合する。本質的に高階な論理の記述が可能となる。例えば次のようなものである。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% mysort.pl&lt;br /&gt;:- module(mysort, [mysort/2]). % エクスポートする述語を指定&lt;br /&gt;:- meta_predicate mysort(:, :). % モジュール変数を(:)で宣言&lt;br /&gt;mysort(Mod:[], Mod:[]).&lt;br /&gt;mysort(Mod:[H|T], Mod:L) :-&lt;br /&gt;                      partition(H, Mod:T, Mod:Less, Mod:Big),&lt;br /&gt;                      mysort(Mod:Less, Mod:L1),&lt;br /&gt;                      mysort(Mod:Big, Mod:L2),&lt;br /&gt;                      append(L1, [H|L2], L).&lt;br /&gt;partition(_, Mod:[], Mod:[], Mod:[]).&lt;br /&gt;partition(X, Mod:[Y|L], Mod:[Y|L1], Mod:L2) :-&lt;br /&gt;                      Mod:(Y &lt; X), % 古いPrologでこのコードは通らない&lt;br /&gt;                      partition(X, Mod:L, Mod:L1, Mod:L2).&lt;br /&gt;partition(X, Mod:[Y|L], Mod:L1, Mod:[Y|L2]) :-&lt;br /&gt;                      \+ Mod:(Y &lt; X), % 記述は柔軟に可能&lt;br /&gt;                      partition(X, Mod:L, Mod:L1, Mod:L2).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% mylist.pl&lt;br /&gt;:- module(mylist, [length/2, (&lt;)/2]).&lt;br /&gt;:- redefine_system_predicate(length(_, _)). % システム述語を上書き&lt;br /&gt;:- redefine_system_predicate(_ &lt; _). % 上に同じ&lt;br /&gt;length([], 0).&lt;br /&gt;length([_|T], N) :- !,&lt;br /&gt;                      length(T, N0),&lt;br /&gt;                      N is N0 + 1.&lt;br /&gt;[_name1, Age1] &lt; [_name2, Age2] :- !, % 自然な記述が可能&lt;br /&gt;                      user:(Age1 &lt; Age2). % 必要に応じ呼び元の意味が使える&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% test_case&lt;br /&gt;:- use_module(mysort).&lt;br /&gt;:- use_module(mylist).&lt;br /&gt;:- mysort(mylist:[ [taro, 19], [hanako, 11], [jiro, 14] ], mylist:Sorted).&lt;br /&gt;Sorted = [[hanako, 11], [jiro, 14], [taro, 19]]&lt;br /&gt;true.&lt;br /&gt;&lt;br /&gt;% invalid_case&lt;br /&gt;:- mysort(mylist:[ [taro, 19], [hanako, 11], [jiro, 14] ], Sorted).&lt;br /&gt; T Call: (7) mysort:mysort(mylist:[[taro, 14], [hanako, 11], [jiro, 10]], _G1778)&lt;br /&gt; T Fail: (7) mysort:mysort(mylist:[[taro, 14], [hanako, 11], [jiro, 10]], user:_G1778)&lt;br /&gt;false.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;変数がどのモジュールに属するかを指定しなかった場合、userモジュールに単一化されていることに注意。これはHaskellが型推論にユーザの助けを必要とする事と同様(とまでは言えないが類似的)の理由による。この理論的背景が80年代に論理プログラミングの意味論として議論され、特に極小モデル理論が用いられた。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-6360646960475950230?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=6360646960475950230' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6360646960475950230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6360646960475950230'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2009/03/metapredicate-1.html' title='meta_predicate (1)'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-1218404431021600091</id><published>2009-03-12T14:37:00.009+09:00</published><updated>2009-03-19T10:20:20.516+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='alcohol'/><title type='text'>Alcohol-Prolog</title><content type='html'>場所確定っぽいです。ところで何か話す場とか考えた方が良いんでしょうか？らくがき帳持って行くんで食べながらセミナーとか。&lt;br /&gt;&lt;br /&gt;-- 以下修正を修正 --&lt;br /&gt;&lt;br /&gt;題目: Prologで大阪さんの事を論理的に考える集い&lt;br /&gt;日時: 3/21(Sat) 夜(18:00-)&lt;br /&gt;場所: &lt;a href="http://r.tabelog.com/osaka/A2701/A270101/27001961/"&gt;阪急グランドビル31F アジアンキッチン&lt;/a&gt;&lt;br /&gt;持物: Prolog大王と苺Haskell&lt;br /&gt;詳細: &lt;a href="http://atnd.org/events/447"&gt;http://atnd.org/events/447&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;詳細リンクに参加申請あるいは@かD下さい。あと辞表は手渡しが基本です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-1218404431021600091?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=1218404431021600091' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/1218404431021600091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/1218404431021600091'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2009/03/alcohol-prolog.html' title='Alcohol-Prolog'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-5043448041335125059</id><published>2008-09-02T20:13:00.003+09:00</published><updated>2008-09-02T20:38:59.562+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>Term Reduction in Prolog</title><content type='html'>Prologで回文判定に出るような無限ループを避ける工夫は二つあって、一つはメタなルール操作を書く事、もう一つはグローバルなI/Oを行う事。実際に行うとなると、どちらも骨の折れる作業なので、これ意識せず行えるのはETが誇る到達点だと思われる。例えばメタなルール操作を行う場合、次のようにしてルール集合に対する適当な項書き換えを行う。ルール自体のセマンティクスは eval_rule/2 で実行されることとなる。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;reduct([], _Ans) :- !.&lt;br /&gt;reduct(T1, T3) :-&lt;br /&gt;    get_rule(T1, E1, Rule),&lt;br /&gt;    eval_rule(E2,  Rule),&lt;br /&gt;    append(E1, E2, T2),&lt;br /&gt;    !, reduct(T2, T3).&lt;br /&gt;get_rule(S1, S3, r(rule1(X, Y), rule1(X, Z))) :-&lt;br /&gt;    retrieve(S1, rule1(X, Y), S2),&lt;br /&gt;    retrieve(S2, rule1(X, Z), S3).&lt;br /&gt;eval_rule([Y = Z, rule1(X, Y)],&lt;br /&gt;    r(rule1(X, Y), rule1(X, Z))).&lt;br /&gt;retrieve(L1, E, L2) :-&lt;br /&gt;    member(E, L1),&lt;br /&gt;    delete(L1, E, L2).&lt;br /&gt;&lt;br /&gt;?- reduct([rule1(X, Y), rule2(Y, Z), rule1(X, Z), rule0(Z)], Ans).&lt;br /&gt;..&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;もう一つのグローバルなI/Oに手を出せば、これはもう完全な手続き型言語となる。循環ループかどうかを区別可能な量のフラグを用意して、特定の述語を経過するごとに assert/1 や retract/1 を実行する。問題の状態遷移に固有のパタンが事前に決定可能であるならば、そのパタンに限り、確実にループを離脱する事が可能となる。&lt;br /&gt;&lt;br /&gt;ここで物言いが入るのは、これらが反則技じゃないのか？ということ。しかし前者は扱う集合の世界が二階になっているだけで、実行されているのはSLD導出と全く同じ内容である。後者についてはI/Oがフラグの上げ下げに限定されている事から、適当な広さのファクトテーブルが存在すれば、これもまたSLD導出で解決される。また別の非難としては、これらが全てランタイムであるというものだが、Prologユーザの視点ではコンパイルも知識ベース読み込みも、全てをランタイムに引きずり下してあるのであって、実行時にコンパイルもリンクも出来て非常に便利なのである。他の言語では実行時に出来る事など限られているのだから。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-5043448041335125059?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=5043448041335125059' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5043448041335125059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5043448041335125059'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/09/term-reduction-in-prolog.html' title='Term Reduction in Prolog'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-7073037786986300123</id><published>2008-09-02T16:11:00.003+09:00</published><updated>2008-09-02T16:44:27.800+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>ET Seminar</title><content type='html'>&lt;a href="http://www.slideshare.net/alohakun/e-tsemi2008-presentation"&gt;ET seminar's slide&lt;/a&gt;&lt;br /&gt;まず講師をされた alohakun さんに敬意を表したいと思います。自分の研究について7時間総攻撃というのは生半可な事ではないから。ETの全体像から例を踏まえて説明して下さったおかげで、魔術的だった部分が明くなりました。それはそれとしてETの理論が詳らかになったかと言うと、幾つか疑問が残ったのでメモしておきます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.107.7229"&gt;Formalization of the Equivalent Transformation Computation Model&lt;/a&gt; Kiyoshi Akama and Ekawit Nantajeewarawat&lt;br /&gt;この論文では、SLD導出で無限時間後に証明可能な回文問題を、ETが有限時間でどう解決するかという例が示されています。まず引き合いに出されているPrologの例ですが、&lt;br /&gt;&lt;pre&gt;palindrome(X) :- reverse(X, X).&lt;br /&gt;?- palindrome([1|X]), palindrome([2|X]).&lt;br /&gt;X = [] ;&lt;br /&gt;.. % Infinite Loop&lt;/pre&gt;という風に無限ループに陥ります。これがETでは、次のルールを適当なタイミングで適用する事により解決を図っています。&lt;br /&gt;&lt;pre&gt;rv(*x, *y), rv(*x, *z) =&gt; {=(*y, *z)}, rv(*x, *y).&lt;/pre&gt;&lt;br /&gt;Prologユーザの目線で考えるとこれは明かにメタな言及で、実現するにはメタインタプリタのレイヤでアトムの操作が必要になりますから、メタ操作を意識せず実現というのは一つの到達点なのだと思います。ただPrologユーザはこれを弱点というより利点だと考えている場合が割りとあります(但し、高階型の支援が無い事はPrologの明かな欠点)。&lt;br /&gt;&lt;br /&gt;さて気になるのはこのETルールの、仕様からの生成可能性や、仕様に対する正当性の証明です。Prologでも勝手にルールを与えて(変えて)構わないなら、先の回文問題の無限ループは回避出来ます。特に、最近このルールが自動導出出来るようになったという事で、その成果は大変興味深いので論文が待ち遠しいのですが、その自動導出プログラムはTuring Completeなのか？また入力に対して計算量のオーダーはどの程度なのか？ルールが持つプライオリティはどのように決定可能か？この辺りにアドバンテージがあると、ETがPrologの理論的限界の先にあるという気分も分かるのですが、現時点ではPrologのランタイムを分断して議論しているという印象を持ってしまいます(あくまで個人的に)。&lt;br /&gt;&lt;br /&gt;というのも、特定の仕様Dに対して正当なETルールがどれほど存在するのかは、決定が非常に難しいと思うからです。もし数が無限個か、或いは決定出来ない場合、ルール集合に半順序関係を入れるなどしなければ、ルール導出プログラムや仕様に対する正当性の証明の停止性を決定出来ないと思うのです。そうなると、ここで"ET処理系に対するHow"が入ってくるのではないでしょうか？&lt;br /&gt;&lt;br /&gt;以上の疑問が残るものの、仕様空間とプログラム空間を分けて議論する事は圏論で説明したら綺麗になりそうだし、多重集合の書き換え系はそれ自体が便利なのでどんどん開発を進めて欲しいし、仕様の如何によってはリッチ(古典的)な否定が定義出来るのかもしれなくて便利な気がするし、といった感じでAfter Workに期待です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-7073037786986300123?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=7073037786986300123' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/7073037786986300123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/7073037786986300123'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/09/et-seminar.html' title='ET Seminar'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-4548931674393608757</id><published>2008-08-11T18:36:00.003+09:00</published><updated>2008-08-11T18:48:45.315+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='governance'/><title type='text'>The Energy War</title><content type='html'>&lt;a href="http://www.ft.com/cms/s/0/4a8c135e-64b0-11dd-af61-0000779fd18c.html"&gt;Kurds claim responsibility for oil line black(FT.com)&lt;/a&gt;&lt;br /&gt;バクー・トビリシ・ジェイハン(Baku-Tbilisi-Ceyhan)パイプラインでクルド系武装組織によると思われる火災が発生、アゼルバイジャンからトルコ・中央アジア諸国に石油を輸送するパイプラインが停止した。グルジア軍が南オセチア自治区に進行したのはこの二日後である。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ft.com/cms/s/c4ab17e8-673a-11dd-808f-0000779fd18c.html"&gt;Georgia pulls out of South Ossetia(FT.com)&lt;/a&gt;&lt;br /&gt;ロシアのエネルギー戦略は複数の計画から構成されているが、災禍の中心にあるグルジアは黒海に面した要所であると同時に、BTCパイプラインというロシア非管轄のパイプラインが通る国である。この近隣諸国で最も重要なポイントが、アゼルバイジャンの有するカスピ海の石油基地であり、先のチェチェン紛争後ロシアが固くなに内政を主張して査察を拒んだ理由も少からずアゼルバイジャンからの石油輸送路確保にあったであろう。またこの土地の魅力はロシアに限ったものではない。ドイツやイタリアをはじめ西欧諸国も、これまで外交的手段の上でパイプラインを実現しようと試みてきた。そして当該国にとってこの地理は、資源輸送と貿易の拠点によって経済的な発展を遂げるために掛替えの無い宝なのだ。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.rice.edu/energy/publications/docs/PEC_Olcott_10_2004.pdf"&gt;THE ENERGY DIMENSION IN RUSSIAN GLOBAL STRATEGY(filetype:pdf)&lt;/a&gt;&lt;br /&gt;プーチンの論文を再確認するまでもなく、これまでの、そしてこれからのロシアにとってエネルギー戦略は生命線であり、石油・天然ガスパイプラインの秩序を一手に担うことがロシアのレゾンデートルとなっている。陸路ではエレツからウクライナを抜けハンガリーへと至るラインや、ポーランドへ抜けるラインが存在するが、これらの諸国では料金の不払いが多発、また防衛上もアメリカの支援が際立っており、決して採算性の良いものとは云えない。海路では、ヴィボルグから北欧の領海を通り欧州へと供給されるNord Stream、黒海経由でトルコへの伸びるBlue Stream、黒海を横断しブルガリア経由でイタリアへ伸びるSouth Stream(開発中)などがある。問題はアゼルバイジャンおよびトルクメニスタンに埋蔵されている資源の輸送である。未だ所有者の明確にならない計画では、カスピ海を横断してアゼルバイジャンとトルクメニスタンを繋ぎ、カザフスタン経由でロシアへと輸送するTrans Caspianが存在する。しかしアゼルバイジャンとトルクメニスタンとの対話は現在進行形であり、ロシアはこの計画に否定的である(正確には、チェチェンからアゼルバイジャンを直接結びたいのだろう)。そしてこの状況につけ入っているのがアメリカである。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Baku-Tbilisi-Ceyhan_pipeline"&gt;BTC Pipeline(Wikipedia)&lt;/a&gt;&lt;br /&gt;チェチェン共和国への経済支援を行なっていたロシアが金融危機に陥り、ルーブルの下落が起った頃、査察団の受け入れと援助が行なわれた。時を同じくして出たニュースが、アメリカ支援の下にトルコ・グルジア・アゼルバイジャンを繋ぐBTCパイプラインである。グルジア軍の進行に対するロシアの姿勢は、この状況に対する明確な行動であろう(或いはクルド系武力組織の裏に誰が居ただろう)。ブッシュ米大統領が任期を満了しつつある事、ポーランドへの米防衛ミサイル配備計画などが緊張を高めている事、(South Streamの拠点である)ノヴォロシスクの重要度が増しチェチェンよりグルジア経路が現実味を増した事、中国の圧倒的な需要拡大とアゼルバイジャン・トルクメニスタンラインによる中央アジア市場の(ロシアからの)別離、エネルギー価格の高騰に伴う許容されるコスト水準の上昇、オリンピックの開催、一時に場に出ないカードが偶然にも揃ってしまうという事態を、プーチンはこれまでも見せ、そしてくぐり抜けて来た。ロシアとアメリカの対立はより一層熾烈なものとなるのかもしれない。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-4548931674393608757?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=4548931674393608757' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/4548931674393608757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/4548931674393608757'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/08/energy-war.html' title='The Energy War'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-7075091126801899410</id><published>2008-08-04T16:01:00.003+09:00</published><updated>2008-08-04T16:29:16.332+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>ET Seminar 2008 (3)</title><content type='html'>&lt;a href="http://shinh.skr.jp/h/?ETSeminar2008"&gt;等価変換理論集中セミナー2008&lt;/a&gt;&lt;br /&gt;表現したい状態の集合を論理式で圧縮することで、(状態数増加による開発の)困難を克服するという流れでPrologの狙いを説明して来た。仕様として想定される状態(今風に云えばテストケースに近いかもしれない)から実装を導くという方針もPrologでは重視されている。しかし実際にPrologで規模を伴なうプログラムの開発を行うと、思ったほど楽ではない事が体験出来る。ではPrologの問題点は何なのか。&lt;br /&gt;&lt;br /&gt;まず特徴的なPrologの表現形式だが、これはS式と思っても構わない。&lt;pre&gt;human(socrates).&lt;br /&gt;≡ (human socrates)&lt;br /&gt;&lt;br /&gt;die(X) :- human(X).&lt;br /&gt;≡ (:- (die X) (human X))&lt;/pre&gt;また連続するアトムに対する結合性などは op/3 で演算子ごとに定義出来る。&lt;pre&gt;&lt;br /&gt;% current_of(400, yfx, '/').&lt;br /&gt;:- op(1100, yfx, '&lt;').&lt;br /&gt;X / _ / X &lt; 'hello'.&lt;br /&gt;≡ (&lt; (/ (/ X _) X) 'hello')&lt;/pre&gt;&lt;br /&gt;プログラムがこのように単純な構造を持つため、ヘッドに適当なアトム列を想定する事で、表記については柔軟な対応が可能だと分かる。しかしマクロやDSLを実現するにはこれだけでは片手落ちなのである。&lt;br /&gt;&lt;br /&gt;マクロによって表現されたプログラムは、当然そのプログラムが実行される前に実行可能な形式、つまりマクロが展開された形になっている必要がある。しかしPrologには述語を制御する仕様は存在してもランタイムを制御する仕様は(部分的にしか)無いため、マクロの実行というセマンティクスをプログラムに埋め込んでやる必要が出てくる。典型的なDOループマクロを見てみる。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;:- op(1100, xfy, do).&lt;br /&gt;(foreach(Elem, List) do Template) :- do_loop(List, iter(Elem, Template)).&lt;br /&gt;do_loop([], _Template).&lt;br /&gt;do_loop([Value|Rest], Template) :-&lt;br /&gt;    copy_term(Template, Copy),&lt;br /&gt;    Copy = iter(Value, Goals),&lt;br /&gt;    call(Goals),&lt;br /&gt;    do_loop(Rest, Template).&lt;br /&gt;&lt;br /&gt;?- foreach(X, [1,2,3]) do write(X), nl.&lt;br /&gt;  call foreach(G1, [1,2,3]) do write(G1), nl&lt;br /&gt;  call do_loop([1|[2,3]], iter(G1, (write(G1), nl)))&lt;br /&gt;    call copy_term(iter(G1, (write(G1), nl)), G2)&lt;br /&gt;    exit copy_term(iter(G1, (write(G1), nl)), iter(G2, (write(G2), nl)))&lt;br /&gt;    call iter(G2, (write(G2), nl)) = iter(1, G4)&lt;br /&gt;    exit iter(1, (write(1), nl)) = iter(1, (write(1), nl))&lt;br /&gt;    call call((write(1), nl))&lt;br /&gt;1&lt;br /&gt;    exit call((write(1), nl))&lt;br /&gt;    call do_loop([2,3], iter(G1, (write(G1), nl)))&lt;br /&gt;      call copy_term(iter(G1, (write(G1), nl)), G5)&lt;br /&gt;      .. &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;展開したマクロと元のテンプレートで変数が被らないよう(健全性)にする copy_temr/2や、変数束縛(マクロ展開)を指示するための =/2 による単一化、そしてクエリ(展開されたマクロ)を実行する call/1 といった具合で、完全に手作業なのである。これを柔軟性と呼ぶのは些か憚られるだろう。&lt;br /&gt;&lt;br /&gt;二階の述語論理も同様の手法で実現される。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;map_list(_Fn, [], []).&lt;br /&gt;map_list(Fn, [X|Xs], [Y|Ys]) :-&lt;br /&gt;    G =.. [Fn, X, Y],&lt;br /&gt;    call(G),&lt;br /&gt;    map(Fn, Xs, Ys).&lt;br /&gt;inc(X, Y) :- Y is X + 1.&lt;br /&gt;&lt;br /&gt;?- map(inc, [1,2,3], L).&lt;br /&gt;L = [2,3,4].&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;高階論理の実現に言語拡張が必要無い分、楽だと云えなくもない。型の判別には functor/3 や atom/1 や number/1 や compound/1 や var/1 などが用意されているから、これらを利用することで高階論理の型チェックも出来ない事はない。しかし全てはランタイムの振舞いとしてプログラミングされるだけであり、よく整備してもライブラリとしてパッケージ化するのが限度となる。ちなみに高度な例としては&lt;a href="http://www.complang.tuwien.ac.at/clp/dcg.pl"&gt;Definite Clause Grammar&lt;/a&gt;がある。&lt;br /&gt;&lt;br /&gt;ここで(当時の)論理型プログラミングが持つ根本的な問題点が浮かびあがってくる。状態の集合を論理的に述べる事は出来ても、高階論理を書く事が出来ても、それらは全て実行時の結果としてしか得ることが出来ない。抽象化というプロセスについては何の支援も行なってくれないのである。例えばタイピングをどの時点でどのように与えるかという問題にしても、他の言語は動的か静的、また或いはリテラルベースか即値ベースかなどの選択肢があるのに対し、Prologが出来ることは精々、&lt;pre&gt;&lt;br /&gt;speak(cat, 'meow').&lt;br /&gt;speak(dog, 'woof').&lt;/pre&gt;という程度なのである。これを簡単と捉えるのか、ただ具体的なレコードと見るのか？&lt;br /&gt;&lt;br /&gt;斯くなる特徴(有利・不利は状況次第だろうが)をPrologはプログラマに強制させるという点が、実際の開発では大きな障害となる。だがPrologの問題点は言語仕様だけでなく、その実行セマティクスにもある。&lt;br /&gt;(続く)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-7075091126801899410?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=7075091126801899410' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/7075091126801899410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/7075091126801899410'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/08/et-seminar-2008-3.html' title='ET Seminar 2008 (3)'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-3027669548021860647</id><published>2008-08-01T11:30:00.008+09:00</published><updated>2008-08-01T11:57:58.512+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>ET Seminar 2008 (2)</title><content type='html'>&lt;a href="http://shinh.skr.jp/h/?ETSeminar2008"&gt;等価変換理論集中セミナー2008&lt;/a&gt;&lt;br /&gt;プログラムと論理との対応を利用することで、状態数の爆発を効率的に抑制出来ないかというのが論理型言語の提案だと述べた。残念ながらこの提案に対して理論的な支援は(当初は)弱く、特に関数型言語やオブジェクト指向がモジュラリティを打ち出した事と比較すれば不利な状況だったと思われる。ではこの状況で論理型言語、特にPrologがどのように戦いを挑んだのか、論理的によく書けているプログラムとはどのようなものなのか。今回はリスト結合という簡単なプログラムを例に、これを考えてみる。&lt;br /&gt;&lt;br /&gt;Prologの教科書で必ず解説されるリスト結合述語が append/3 である。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;append([], [], []).&lt;br /&gt;append([1], [2], [1,2]).&lt;br /&gt;.. % 果てしなく続く&lt;br /&gt;?- append([1,2], [3], X).&lt;br /&gt;  call append([1,2], [3], X)&lt;br /&gt;  exit append([1,2], [3], [1,2,3])&lt;br /&gt;X = [1,2,3].&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;可能な限りこの記述を並べる事で、リストの結合がどのようなものか(what)は記述できる。しかしこの調子ではリスト中の値が決まり決まっていて不便である。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;append([], [], []).&lt;br /&gt;append([I1], [I2], [I1,I2]).&lt;br /&gt;.. % 果てしなく続く&lt;br /&gt;?- append([a,2], [c], X).&lt;br /&gt;  call append([a,2], [c], X)&lt;br /&gt;  exit append([a,2], [c], [a,2,c])&lt;br /&gt;X = [a,2,c].&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;こうすると少しはましになるが依然として不便に変わりはない。何故これが不便なのかというと、可能な状態の数が非常に多く存在する(もっとも資源の都合で有限ではある)ため、これらをプログラミングするのは(文字通り)骨が折れるからである。ここで冒頭に掲げた主張が活きてくる、つまり状態の爆発を抑制出来る述語を考えれば善いのである。&lt;br /&gt;&lt;br /&gt;個々の具体的なリストから離れ、リストという集合を分類してはどうか、というメタな視点に立つ。大雑把な括りで見れば、リストというのは空っぽかそうでないのかに分類出来る。そしてリストの結合について望む事は、一つは空っぽリストと任意のリストの結合は任意のリストになる事。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;%            ____       ____&lt;br /&gt;% X:NIL + Y:|____| = Y:|____|&lt;br /&gt;%&lt;br /&gt;append([], Y, Y).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;もう一つは当然、空っぽではないリストと任意のリストの結合についての言及である。そこでリストの分類に少し補足を加え、空でないリストについて少し細かく見る必要がある。空でないのであれば、少くとも1つの要素と任意のリストで結合出来るはずである。だから先の要件は、空っぽでないリスト(=少くとも1つの要素と任意のリストを結合したリスト)と任意のリストの結合は、少くとも1つの要素と任意のリスト(=任意のリストと任意のリストを結合したリスト)の結合となる。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;%     _        ___        ____       _         ___       ____&lt;br /&gt;% (X:|_| + Xs:|___|) + Y:|____| = X:|_| + (Xs:|___| + Y:|____|)&lt;br /&gt;%&lt;br /&gt;append([X|Xs], Y, [X|Z]) :- append(Xs, Y, Z).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;斯くて教科書的な append/3 が出来あがる。この二つの述語で、先程までは延々と書き連ねる必要のあった状態集合を被覆しきる。ちなみに論理型プログラミングを発案したAlain Colmerauerらは、この述語の発見に一ヶ月を要したそうである。それでは実行過程を確認してみる。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;?- append([1,2,3], [4,5], Z).&lt;br /&gt;  call append([1|[2,3]], [4,5], [_G1|_G2])&lt;br /&gt;    call append([2|[3]], [4,5], [_G3|_G4])&lt;br /&gt;      call append([3|[]], [4,5], [_G5|_G6])&lt;br /&gt;        call append([], [4,5], _G7)&lt;br /&gt;        exit append([], [4,5], [4,5])&lt;br /&gt;      exit append([3|[]], [4,5], [3|[4,5]])&lt;br /&gt;    exit append([2|[3]], [4,5], [2|[3|[4,5]]])&lt;br /&gt;  exit append([1|[2,3]], [4,5], [1|[2|[3|[4,5]]]])&lt;br /&gt;Z = [1,2,3,4,5].&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ここで見る事が出来る実行過程は、状態集合とどのような関係にあるのか？それは状態集合を空間として見た場合の連続した経路の事で、Prologが探索型の言語だと言われる所以である。畢竟するところ論理型プログラミングの根底には、オートマトンを如何に効率良く圧縮するかという思想が見え隠れするのである。&lt;br /&gt;&lt;br /&gt;逆に状態集合ではなく実行過程から論理型プログラミングを見てみると、個々のステップ(というのは実体化された述語)は状態と状態を繋ぐ線であり、これはつまり継続の断片である。実行の側から見れば、論理的なプログラムとは可能な状態群を巡回する継続の集合である。そして可能な状態の抽象度を下げていけば、やがてこれは論理回路の可能な入出力値の集合となり、継続は要素の写像で、少し抽象度を上げれば機械語に対応する。&lt;br /&gt;&lt;br /&gt;ここで視点を戻して、状態集合に立ち帰る。人間の視覚上でリストの結合は、片方のお尻に片方の頭が接する状態だと考えた方が遥かに直感的であろう。そもそもリストが空かそうでないかの分類の上で結合操作を行なう人間はまず居ない。何故なら人間はリストをもっと大雑把に「ひと連なりのもの」と捉えているからである。このときに「ひと連なりのもの」集合は、先のリストの状態集合とどのような関係にあるのか？&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% リストと「ひと連なりのもの」の対応例&lt;br /&gt; ____     ____ __      __&lt;br /&gt;|____| = |____|__.. - |__..&lt;br /&gt;          ____ _     _&lt;br /&gt;       = |____|_| - |_|&lt;br /&gt;          ____ ___      ___&lt;br /&gt;       = |____|___.. - |___..&lt;br /&gt;&lt;br /&gt;       .. 果てしなく続く&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;お尻の先をあやふやなままにしたものが「ひと連なりのもの」だと考えると、リストと一対一対応を取ることは出来ないが、少くとも(ひと連なりのもの集合からリスト集合へは)全射ではある。この大雑把な状態の分類を利用すれば、リストの結合は非常に簡単になる。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;dl_append(X-Y, Y-Z, X-Z).&lt;br /&gt;?- dl_append([1,2|Xs]-Xs, [3,4|Ys]-Ys, Z-[]).&lt;br /&gt;  call dl_append([1,2|_G1]-_G1, [3,4|_G2]-_G2, _G3-[])&lt;br /&gt;  exit dl_append([1,2|[3,4|[]]]-[3,4|[]], [3,4|[]]-[], [1,2|[3,4|[]]]-[])&lt;br /&gt;Z = [1,2,3,4].&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ご覧のようにルールすら無しに、リスト結合の状態集合を被覆する事が出来る。ちなみにこのようなリスト表現は差分リストと呼ばれ、Prologの常套手段となっている。&lt;br /&gt;(続く)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-3027669548021860647?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=3027669548021860647' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3027669548021860647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3027669548021860647'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/08/et-seminar-2008-2.html' title='ET Seminar 2008 (2)'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-5703377514230576031</id><published>2008-07-31T08:53:00.004+09:00</published><updated>2008-07-31T11:25:06.997+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>ET Seminar 2008 (1)</title><content type='html'>&lt;a href="http://shinh.skr.jp/h/?ETSeminar2008"&gt;等価変換理論集中セミナー2008&lt;/a&gt;&lt;br /&gt;かねて切望されていた集中セミナーが開かれる運びとなった。取りまとめをされたshinh氏、講師を勤められるalohakun氏、会場を提供して頂いたサイボウズに感謝の意を示すと共に、微力ながら事前知識の整理をお手伝いしようかと思う。事前知識というのは、計算論における述語論理のチューリング完全性と等価変換という魅惑のパラダイス(？)、この両者の間に横たわっている「名状しがたきもの」の事である。&lt;br /&gt;&lt;br /&gt;まずPrologの理論的背景と実際のプログラムの接点から始めよう。Robert Kowalskiが見出したSLD導出の話である。プログラムと証明の対応から確認する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;+----+----------------------+----------------------------------+&lt;br /&gt;|    |プログラム            |証明                              |&lt;br /&gt;+----+----------------------+----------------------------------+&lt;br /&gt;|前提|is_human(socrates).   |is_human(socrates)は真            |&lt;br /&gt;|    |die(X) :- is_human(X).|die(X)は真 または !is_human(X)は真|&lt;br /&gt;+----+----------------------+----------------------------------+&lt;br /&gt;|命題|?- die(X).            |die(X)は真 となるXは何か?         |&lt;br /&gt;+----+----------------------+----------------------------------+&lt;br /&gt;|過程|die(X)                |!die(X)と仮定                     |&lt;br /&gt;|    |  is_human(X)         |ならば !is_human(X)は真           |&lt;br /&gt;|    |  is_human(socrates)  |しかし !is_human(socrates)は矛盾  |&lt;br /&gt;|    |X = socrates.         |X = socrates ならば die(X)は真    |&lt;br /&gt;+----+----------------------+----------------------------------+&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;プログラムの各述語と証明の各命題に対応が見てとれる。ここでプログラムの各述語の形式をホーン節と呼び、述語論理における正リテラルが高々一つの論理式を指す。細かな対応を補足すると次のようになる。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   is_human(socrates).     % ファクト&lt;br /&gt;≡ ⇒ is_human(socrates)&lt;br /&gt;≡ is_human(socrates)      % ホーン節&lt;br /&gt;&lt;br /&gt;   die(X) :- is_human(X).  % ルール&lt;br /&gt;≡ is_human(X) ⇒ die(X)&lt;br /&gt;≡ die(X) ∨ !is_human(X)  % ホーン節&lt;br /&gt;&lt;br /&gt;   ?- die(X).              % クエリ&lt;br /&gt;≡ die(X) ⇒&lt;br /&gt;≡ !die(X)                 % ホーン節&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Prologの挙動を証明と対応付けるアルゴリズムはSLD導出(Selective Linear Definite Resolutin)という名で与えられている。これはプログラムに対応するホーン節集合を考え、二重否定によって真となる部分集合を検索するアルゴリズムである。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;集合: (die(X) ∨ !is_human(X)), is_human(socrates)&lt;br /&gt;入力: !die(X)&lt;br /&gt;step-0 入力を選択節とする&lt;br /&gt;  選択節: !die(X)&lt;br /&gt;step-1 集合より選択節を簡約化可能なホーン節を選択節に加える&lt;br /&gt;  選択節: !die(X) ∧ (die(X) ∨ !is_human(X))&lt;br /&gt;step-2 簡約化&lt;br /&gt;  選択節: !is_human(X)&lt;br /&gt;step-3 集合より選択節を簡約化可能なホーン節を選択節に加える&lt;br /&gt;  選択節: !is_human(X) ∧ is_human(socrates)&lt;br /&gt;step-4 簡約化&lt;br /&gt;  選択節: NIL&lt;br /&gt;step-5 選択節が空なので入力は真&lt;br /&gt;  出力: NIL ≡ !!die(socrates)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;このように(二重否定による肯定を許可)して述語論理とPrologの実行解釈が結びつく。さて実はここからが本題で、論理式とプログラムの対応が具体的に定まるのなら、膨れ上がっていく状態の制御(how)は論理(what)を使うことで相当に抑制できるのではないか、という提案が浮上して来る。特にSLD導出で現れる"選択"と"簡約"の処理を上手く作り込む事で、制御の負担が減るのではないかと期待したのである。この"選択"と"簡約"をバックトラックとユニフィケーションによって実現することは言うまでもない。&lt;br /&gt;(続く)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-5703377514230576031?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=5703377514230576031' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5703377514230576031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5703377514230576031'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/07/et-seminar-2008-1.html' title='ET Seminar 2008 (1)'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-530556080899775665</id><published>2008-07-14T21:54:00.003+09:00</published><updated>2008-07-14T23:12:52.258+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='art'/><category scheme='http://www.blogger.com/atom/ns#' term='ideology'/><title type='text'>「セックスと嘘とビデオテープとウソ」と私</title><content type='html'>&lt;a href="http://ja.wikipedia.org/wiki/%E6%9D%BE%E6%B1%9F%E5%93%B2%E6%98%8E"&gt;ドキュメンタリー監督 松江哲明 (Wikipedia)&lt;/a&gt;&lt;br /&gt;阿佐ヶ谷LoftAで二本のドキュメントフィルムが上映された。松江哲明の視る目、気付く目を通して、観客は確かな映像、作家の個性と対話しのだった。独立系AVスタジオHMJMの設立を追い駆けたドキュメント「ハメ撮りの夜明け 完結編」は、監督本人が語るように被写体との関係性が断絶した世界を取材するAVである。極めて私的な領域に踏み込み、映像作家としての狡猾さを垣間魅せたもう一本の作品は、「完結編」の終劇から4年後を抉りとった快作「セックスと嘘とビデオテープとウソ」である。一線を踏み越えた後ろめたさが場内を覆った新作からは、作家としての聖域に踏み込んだ事を予感させる。&lt;br /&gt;&lt;br /&gt;AVについて話す場合、その視点は四つに分類する事が出来よう。事を処すべく用意した映像を男が視る場合と女が視る場合、或いは事が処される様を映した物を男が視る場合と女が視る場合。この四つの局面はそれぞれに時間と空間を異にして存在している。&lt;br /&gt;&lt;br /&gt;まず事を処すべく用意した映像を男が視るという状況から述べねばなるまい。これはソフト・オン・デマンドを筆頭にしたエンタテインメント作品として進化、素材と手法と品質の深化という方向である。畢竟いまの先鋭化された、また見方を変えれば鈍化した工業的な商品群を指す。次に事が処される様を映した物を男が視る場合を述べる必要がある。これこそが「ハメ撮りの夜明け」の追い求めた、つまりHMJMが求めた、もっと言えばかつてのV&amp;Rが作った(伝説的な)ハメ撮り作品(例えば「私を女優にしてください」)である。一組になった演者と撮る者を映像として客体化し、その媒体を通して語りえない何かを夢想するという(ある意味で)野心的な作品群がかつては存在した。男の論理という軸について、まずこの相反するベクトルがある。&lt;br /&gt;&lt;br /&gt;次にそれと直交して女の軸が展開される。この軸は内奥性あるいは個性の連続性として理解される。一方の端には、映像として切り取られた個性の断片を通して情緒の再構築を目指す見方、「セックスと嘘とビデオテープとウソ」で松江が見事に昇華させた、人の心の境界線を綱渡りする行為がある。また一方には、一切の言語化を否定して(ただ肉欲に溺れて)行く先に待ち受ける不連続点で個性を完結させる方向、「ハメ撮りの夜明け」の劇中に出現する度し難い欲求の素人が居る。言うまでもなく、この軸で言う前者の方向は基本的に映像化されず、後者は先の男の論理と手を組んで広大な消費者市場を形成する。&lt;br /&gt;&lt;br /&gt;まるで複素平面のように、それぞれの方向単位が調和関係にあるこの欲望曼荼羅の中を、松江哲明という人間は螺旋状に放射して行っているのではないかと思わせる節がある。一夜の上映で、ある男の論理とある女の欲望が交差する一端から、また別の男の論理がまた別の女の感情と衝突する一端へ、事も無げに跳躍する様を魅せたのである。サド侯爵という特異な、ある意味で神的なまでに封建的な自由人を、三島由紀夫は「無垢な悦びが増長して怪物となり、やがて何人も寄り付かぬ聖域」として描いてみせた新劇を、私は思い起こさずにはおれないのだった。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-530556080899775665?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=530556080899775665' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/530556080899775665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/530556080899775665'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/07/blog-post.html' title='「セックスと嘘とビデオテープとウソ」と私'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-3742556676251054428</id><published>2008-07-12T23:37:00.003+09:00</published><updated>2008-07-13T00:13:13.439+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>Continuation on Prolog</title><content type='html'>Prologを実装するために継続を利用する事例は数有れど、その逆は稀有である。当然の話ではあるが、基本的にPrologのセマンティクス自体は継続が無ければ実現出来ない機構であるため、改めて継続を明示的に利用するケースはほとんど無いからである。だがしかし、もし敢えてそれに及ばなければならないとしたら、そんな場合のちょっとしたコツもある。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% call_ac/2&lt;br /&gt;call_ac(Pred, Cont) :-&lt;br /&gt;    Pred =.. [_|Args],           % 節に単一化される引数を補足しておく&lt;br /&gt;    Pred,                        % 述語が評価される&lt;br /&gt;    Cont =.. [cont, Args, Body], % 次の継続に現時点で単一化されている変数を渡す&lt;br /&gt;    Body.                        % 先の述語で確定した変数で継続を実行&lt;br /&gt;&lt;br /&gt;?- call_ac(fact(10, Ans),&lt;br /&gt;           cont([X, Y],&lt;br /&gt;                (write('fact '), write(X), write(' is '), write(Y), nl))).&lt;br /&gt;fact 10 is 3628800&lt;br /&gt;&lt;br /&gt;Ans = 3628800,&lt;br /&gt;X   = 10,&lt;br /&gt;Y   = 3628800.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;残念ながら Scheme のように現在の継続を取得する述語は ISO-Prolog に存在しない（当然だが現在の継続そのものはスタックに積まれている、更に&lt;q&gt;直前に選択した継続の予備 = バックトラック候補&lt;/q&gt;も別のスタックに一つ割当られている）ため、明示的に継続を渡す必要がある。call/cc の代わりに call with a continuation である。この作業はいうなれば Prolog の実行手順を再現しているようなもので、順番に述語を評価し、束縛された変数を次の述語に束縛する。このような&lt;q&gt;数珠繋ぎの関係&lt;/q&gt;こそが逐次的な関係の論理的な意味づけなのだ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-3742556676251054428?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=3742556676251054428' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3742556676251054428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3742556676251054428'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/07/continuation-on-prolog.html' title='Continuation on Prolog'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-4928012817702874808</id><published>2008-07-11T15:37:00.005+09:00</published><updated>2008-07-11T16:03:11.650+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>ゆの in Prolog</title><content type='html'>元ネタが分からないし表示を眺めても楽しさが伝わらないのだが、とりあえずPrologでも書ける事を示す必要を感じたので。なお、組込み述語を書き換えているので実行には注意すること。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;:- encoding(utf8).&lt;br /&gt;:- redefine_system_predicate('&amp;lt;'(_, _)).&lt;br /&gt;:- op(1100, yfx, '&lt;').&lt;br /&gt;% '&lt;'/2&lt;br /&gt;'&amp;lt;'(X/_/X, Msg) :- atom_concat('ひだまりスケッチx365 ', Msg, X).&lt;br /&gt;&lt;br /&gt;?- X / _ / X &amp;lt; '来週も見てくださいね!'.&lt;br /&gt;&lt;br /&gt;X = 'ひだまりスケッチx365 来週も見てくださいね!'.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;もしかすると最も短いんじゃないだろうかと思うのだが。あと、'&amp;lt;'の方が顔に見えるのだが..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-4928012817702874808?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=4928012817702874808' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/4928012817702874808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/4928012817702874808'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/07/in-prolog.html' title='ゆの in Prolog'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-5143247673895312473</id><published>2008-07-10T22:34:00.004+09:00</published><updated>2008-07-11T00:04:07.536+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>Cost of Exception on C++</title><content type='html'>&lt;a href="http://filodej.blogspot.com/2008/06/hard-aix-crash.html"&gt;A curious AIX crash&lt;/a&gt;&lt;br /&gt;Yaccに見つかった年代物のバグと違い、こちらは現在でも或いは今だからこそ遭遇する類のバグである。C++を実際の開発で運用する場合には非常に多くのルールを設ける必要がある。それは開発者のメンタルモデルや仕様との接続といった上位のセマンティックスから、プログラムを実行する命令プロセッサやアーキテクチャなどの下位のセマンティックスまでに渡り、現実的には数多くの罠が仕掛けられたレースを駆け抜けて行くようである。冒頭のリンクは、下のレイヤで見つかった罠を如何にして潜り抜けたかという話である。&lt;br /&gt;&lt;br /&gt;Filodejは複数のプラットフォームに対応したアプリケーションを開発している。ある日発見されたバグはAIXでのみ発現するものだった。それは次の部分でSEGVを起こした。&lt;br /&gt;&lt;pre&gt;virtual T const&amp; get( unsigned int id ) const&lt;br /&gt;{   &lt;------------ The crash was right here before anything happen&lt;br /&gt;    if ( id &lt; static_cast( m_values.size() ) )&lt;br /&gt;        return get_internal( id );&lt;br /&gt;    throw ExceptionNotFound( LOCARG, id, count() );&lt;br /&gt;    UNREACHABLE_RETURN( T() );&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;cite&gt;- Filodej's Linux primerより&lt;/cite&gt;&lt;br /&gt;対応する命令列は次の箇所。&lt;br /&gt;&lt;pre&gt;0x39927250  7c0802a6    mflr  r0            ;; Function call prologue routine&lt;br /&gt;0x39927254  93e1fffc    stw   r31,-4(r1)&lt;br /&gt;0x39927258  93c1fff8    stw   r30,-8(r1)&lt;br /&gt;0x3992725c  93a1fff4    stw   r29,-12(r1)&lt;br /&gt;0x39927260  9381fff0    stw   r28,-16(r1)&lt;br /&gt;0x39927264  9361ffec    stw   r27,-20(r1)&lt;br /&gt;0x39927268  9341ffe8    stw   r26,-24(r1)&lt;br /&gt;0x3992726c  90010008    stw   r0,0x8(r1)&lt;br /&gt;0x39927270  9421ed30    stwu  r1,-4816(r1)  ;; Here was the place of the segfault&lt;/pre&gt;&lt;br /&gt;疑惑は r1 の値か -4816(r1) の値に絞られる。C++で開発をしていると、この手の不具合は"割と"見られる症状である。例えばプログラムが pthread を利用している場合がそうだ。スレッドスタックの伸張時、スタックに割当てられたインスタンスオブジェクトに未初期化フィールドがあるとこの手のバグに遭遇する。しかし今回のケースでは違っていた。&lt;br /&gt;&lt;br /&gt;AIXに限らず、現代的なOSではguard pageという不正アクセスの検知領域が存在する。先のプログラムは -4816(r1) がこのguard page内を参照したためにSEGVを投げていたのだ。では何故そこを参照したのか？最初に載せたC++のコードで、例外を投げる部分が問題だったのである。氏が備えをした例外は、発生時にヒープ割当てを起こさないためにスタックに確保したオブジェクトだった。そしてこれはワイドキャラクターの配列として実装されていた。この比較的大きな例外オブジェクトはAIXが用意するスタックサイズを飛び抜けてしまい、またそれがヒープ確保されないがために、明示的にguard pageを叩いたのだ。結果的に見れば、これはソフトウェアをクラックする常套手段でもある。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-5143247673895312473?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=5143247673895312473' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5143247673895312473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5143247673895312473'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/07/cost-of-exception-on-c.html' title='Cost of Exception on C++'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-5404341688503644586</id><published>2008-07-09T11:56:00.003+09:00</published><updated>2008-07-09T12:27:21.292+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>Ancient bugs on Yacc</title><content type='html'>&lt;a href="http://undeadly.org/cgi?action=article&amp;sid=20080708155228"&gt;New Otto malloc helps spot ancient bugs&lt;/a&gt;&lt;br /&gt;OpenBSDの開発に多大な貢献（最近はFFS2対応）をしているOtto Moerbeekが、先ごろの c2k8 hackathon で新しいmallocの実装を試みていた。これはページサイズを1として(1/2, 1)の領域を割当てる。もし MALLOC_OPTIONS がG（&lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=malloc"&gt;guard pages&lt;/a&gt;を有効にする）で無い場合でも、アドレスの実体は mmap(2) でランダム化されているため、割当てた領域より後ろへの参照をより確実に SEGV として捉えることが出来る。実装は上手く機能していると思われた。&lt;br /&gt;&lt;br /&gt;ところがNikolay Sturmはsparc64上で巨大なC++プロジェクトをコンパイル時にエラーが出る事を発見する。調査を始めたOttoは、どうやら obj/cp/parse.c 内の yyparse() が悪さをしている事を突き止める。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ja.wikipedia.org/wiki/Yacc"&gt;Yacc (Wikipedia)&lt;/a&gt;はルール毎にアクションを記述し、ルールに適合した要素を使って結果を定義する。もしアクションの記述が無い場合には、暗黙的に次の記述が補われ、ルールに適合した要素が結果としてそのまま保持される。&lt;br /&gt;&lt;pre&gt;{ $$ = $1; }&lt;/pre&gt;&lt;br /&gt;そして、これに該当する yyparse() 内の処理が次の二行である。&lt;br /&gt;&lt;pre&gt;yym   = yylen[yyn];&lt;br /&gt;yyval = yyvsp[1-yym];&lt;/pre&gt;&lt;br /&gt;ここで yym が 0 の場合、スタックに積まれた先頭の要素、つまりカレントポインタの一つ上のエントリーが yyval に代入される。&lt;br /&gt;&lt;br /&gt;この処理は例えば次のようなテキストをパースするとちょっとした問題が発生する。&lt;br /&gt;&lt;pre&gt;A: /* empty */ { foo(); };&lt;/pre&gt;&lt;br /&gt;期待される要素が無いために yyval にはゴミが代入される。実際にその要素は使われる事が無いため、多くの場合は大した問題にはならない。しかしもしスタックが上限値に近い場合、つまり氏の malloc が提供するあそび部分（未割当領域）を参照すると SEGV が発生する。実際、バグが確認されたのはC++コードのコンパイル時、24bytes 先の要素を参照しようとした時点で氏の malloc が確保していたのは 16bytes 先までだった。&lt;br /&gt;&lt;br /&gt;振り返ると、このバグはsparc64のページサイズが 8k だったから発見された。Yaccの標準スタックサイズはC++の場合に 24bytes*200=4800bytes で、これはページサイズの半分より若干大きく、ページサイズより小さい。結果、ページの移動が発生することなく正しく SEGV が検知されたわけである。&lt;br /&gt;&lt;br /&gt;氏はこの部分を過去に遡って調べた。すると1975年リリースのUNIX 6th editionにおいて、同様の二行が発見されたのだった。&lt;br /&gt;&lt;pre&gt;yypv  =- yyr2[n];&lt;br /&gt;yyval =  yypv[1];&lt;/pre&gt;&lt;br /&gt;まだ -= を =- と表記していた頃の産物である。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-5404341688503644586?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=5404341688503644586' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5404341688503644586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5404341688503644586'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/07/ancient-bugs-on-yacc.html' title='Ancient bugs on Yacc'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-4764265314507374093</id><published>2008-07-08T21:32:00.005+09:00</published><updated>2008-07-08T23:08:21.780+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>An Arithmetic with Polynomials</title><content type='html'>多項式を始めとする抽象化された代数上の演算では、記号処理に長けたLispやPrologが本領を発揮する。しかし代数表現の実装としてどのような構造を選ぶかによって、その難しさには大きな差が出る。例えば多項式の場合、恐らく一般的で経済的な表現形式はRisa/asirの採用している分散表現多項式である。これは変数と主項ごとに次数を、主項ごとに係数を行列として保持する形式である。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  3x^3*z+x^2*y^3-5x*y-x*z+2y^3+y+z^2-2&lt;br /&gt;=  c | x  y  z&lt;br /&gt;  ---+---------&lt;br /&gt;   3 | 3  0  1&lt;br /&gt;   1 | 2  3  0&lt;br /&gt;  -5 | 1  1  0&lt;br /&gt;  -1 | 1  0  1&lt;br /&gt;   2 | 0  3  0&lt;br /&gt;   1 | 0  1  0&lt;br /&gt;   1 | 0  0  2&lt;br /&gt;  -2 | 0  0  0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;この形式のメリットは明白で、多項式の四則演算が簡便に実装出来る点にある。例えば加算は次数（xyz列）が一致する行の係数（c列）を足せばよい。また乗算は、乗数と被乗数の主項毎に次数行の加算と係数の乗算を行えばよい。減算と除算は逆である。乗算と除算に関しては、同じ主項を生成する場合があるので後から正規形に正す必要がある。ここで云う正規形とは主項を辞書式順序付けで並べた形式を指す。一般的に多項式の表現は一意ではないため（また理論上の取り扱いのため）、このような措置を取る必要がある。&lt;br /&gt;&lt;br /&gt;以下にPrologでの加乗算 実装例を示す。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% ordinal/2&lt;br /&gt;ordinal(_C1*L1, _C2*L2) :- ordinal_aux(L1, L2).&lt;br /&gt;ordinal_aux([], []) :- !.&lt;br /&gt;ordinal_aux([X|_], [Y|_]) :- X &gt; Y, !.&lt;br /&gt;ordinal_aux([X|Xs], [X|Ys]) :- !, ordinal_aux(Xs, Ys).&lt;br /&gt;?- ordinal(1*[1, 0, 2],&lt;br /&gt;           1*[1, 1, 1]).&lt;br /&gt;fail.&lt;br /&gt;?- ordinal(1*[0, 1, 2],&lt;br /&gt;           1*[0, 0, 3]).&lt;br /&gt;true.&lt;br /&gt;&lt;br /&gt;% norm/2&lt;br /&gt;norm([], []).&lt;br /&gt;norm([C1*L1|R1], P) :-&lt;br /&gt;    !, norm_aux(C1*L1, R1, C2, R3), norm(R3, R2),&lt;br /&gt;    (C2 = 0 -&gt; P = R2;&lt;br /&gt;     P = [C2*L1|R2]).&lt;br /&gt;norm_aux(C1*_L1, [], C1, []).&lt;br /&gt;norm_aux(C1*L1, [C2*L1|R2], C3, R3) :-&lt;br /&gt;    !, norm_aux(C1*L1, R2, C4, R3), C3 is C2 + C4.&lt;br /&gt;norm_aux(T1, [T2|R2], C3, [T2|R3]) :-&lt;br /&gt;    !, norm_aux(T1, R2, C3, R3).&lt;br /&gt;?- norm([2*[1, 0, 1],-1*[1, 0, 1]], Ans).&lt;br /&gt;Ans = [1*[1, 0, 1]].&lt;br /&gt;&lt;br /&gt;% add/3&lt;br /&gt;add([], [], []) :- !.&lt;br /&gt;add([], R2, R2) :- !.&lt;br /&gt;add(R1, [], R1) :- !.&lt;br /&gt;add([C1*L|R1], [C2*L|R2], [C3*L|R]) :-&lt;br /&gt;    !, plus(C1, C2, C3), add(R1, R2, R).&lt;br /&gt;add([T1|R1], [T2|R2], [T1|R]) :-&lt;br /&gt;    ordinal(T1, T2), !, add(R1, [T2|R2], R).&lt;br /&gt;add([T1|R1], [T2|R2], [T2|R]) :-&lt;br /&gt;    ordinal(T2, T1), !, add([T1|R1], R2, R).&lt;br /&gt;?- add([ 2*[2, 0, 1], 1*[0, 1, 0],-3*[0, 0, 2],              4*[0, 0, 0]],&lt;br /&gt;       [-1*[2, 0, 1], 1*[0, 1, 0],              2*[0, 0, 1],-2*[0, 0, 0]],&lt;br /&gt;       Ans).&lt;br /&gt;Ans = [1*[2, 0, 1], 2*[0, 1, 0], -3*[0, 0, 2], 2*[0, 0, 1], 2*[0, 0, 0]].&lt;br /&gt;&lt;br /&gt;% mult/3&lt;br /&gt;mult(P1, P2, P3) :- mult_aux(P1, P2, P), !, norm(P, P3).&lt;br /&gt;mult_aux([], _R2, []).&lt;br /&gt;mult_aux([T1|R1], R2, P) :-&lt;br /&gt;    !, mult_aux1(T1, R2, P1), mult_aux(R1, R2, P2), append(P1, P2, P).&lt;br /&gt;mult_aux1(_T1, [], []).&lt;br /&gt;mult_aux1(C1*L1, [C2*L2|R2], [C3*L3|R3]) :-&lt;br /&gt;    !, C3 is C1 * C2, mult_aux2(L1, L2, L3), mult_aux1(C1*L1, R2, R3).&lt;br /&gt;mult_aux2([], [], []).&lt;br /&gt;mult_aux2([X|Xs], [Y|Ys], [Z|Zs]) :-&lt;br /&gt;    !, Z is X + Y, mult_aux2(Xs, Ys, Zs).&lt;br /&gt;?- mult([1*[2], 1*[1], 1*[0]],&lt;br /&gt;        [       1*[1],-1*[0]],&lt;br /&gt;        Ans).&lt;br /&gt;Ans = [1*[3],-1[0]].&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-4764265314507374093?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=4764265314507374093' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/4764265314507374093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/4764265314507374093'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/07/arithmetic-with-polynomials.html' title='An Arithmetic with Polynomials'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-6097400508635017135</id><published>2008-07-07T21:36:00.002+09:00</published><updated>2008-07-07T22:20:29.964+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>Loop fusion</title><content type='html'>手続き型言語において、複数のループを一つにまとめる事はかなり初歩の部類に入る最適化である。一見まったく異なるループでもちょっとした変数変換で一つに出来る事に気付くのは、プログラミングを始めた頃に誰もが通る愉しみだろう。FORTRANなどのひたすらにループ（だけ）を工夫する言語では、この手の最適化はコンパイラがかなり面倒を見てくれる。だが最適化とは違う目的で、ループ融合を使う場合も存在する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;foreach (var elem in arr) { do something.. }&lt;br /&gt;for (var i = 0; i &lt; arr.length; ++i) { do something.. }&lt;br /&gt;    ↓&lt;br /&gt;for (var i = 0; i &lt; arr.length; ++i) {&lt;br /&gt;    var elem = arr[i];&lt;br /&gt;    do something..&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;この手のアプローチは論理型言語であるPrologでも有効である、ばかりでなく別の利点も存在する。例えばリストの長さを求める述語 len/2 とリストの要素が何番目にあるのかを示す述語 nth/3 を見てみよう。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% len/2&lt;br /&gt;len([], 0).&lt;br /&gt;len([_|R], N) :- !, len(R, N0), N is N0 + 1.&lt;br /&gt;% nth/3&lt;br /&gt;nth([X|_], 1, X).&lt;br /&gt;nth([_|R], N, X) :- !, N1 is N - 1, nth(R, N1, X).&lt;br /&gt;&lt;br /&gt;?- len(L, 3).&lt;br /&gt;L = [_G101, _G102, _G103].&lt;br /&gt;?- nth([1,2,3], I, 2).&lt;br /&gt;ERROR: is/2: Arguments are not sufficiently instantiated&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;代入演算子 is/2 は副作用を伴う述語であるため、未初期化変数を伴っての呼び出しは例外を送出する。失敗していない len/2 は、初期化後の呼び出しであるために単一化の双方向性が保たれている。そこで、両者を上手く融合してやれば nth/3 でも双方向性が維持出来ないかと考える。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;len(L, N) :- len_aux(L, 1, N).&lt;br /&gt;len_aux([], _I, 0) :- !.&lt;br /&gt;len_aux([_], I, I).&lt;br /&gt;len_aux([_|R], I, N) :- !, I1 is I + 1, len_aux(R, I1, N).&lt;br /&gt;?- len([1,2,3], Len).&lt;br /&gt;Len = 3.&lt;br /&gt;?- len(List, 3).&lt;br /&gt;List = [_G172, _G178, _G184].&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;どちらを近づけるかは恣意的ではあるが、リスト長が分かるのは要素を全て確認した後であることを考慮すれば、len/2 には個々の要素が何番目であったかの情報が既に含まれていると考える事も可能である。そこで len/2 を nth/3 に近づけていく。カウントアップ時に is/2 が例外を投げないように、今が何度目の呼び出しかを記録する。アリティと節頭部の形が変わった部分は、呼び出し元で補正する。あとは頭部の変数名を揃えると、二つの再帰は融合出来る。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;nth(L, N, E) :- nth_aux(L, 1, N, E).&lt;br /&gt;nth_aux([], _I, 0, _E) :- !.&lt;br /&gt;nth_aux([E|_], N, N, E).&lt;br /&gt;nth_aux([_|R], M, N, E) :- !, M1 is M + 1, nth_aux(R, M1, N, E).&lt;br /&gt;?- nth([a, b, c], I, E).&lt;br /&gt;I = 1,&lt;br /&gt;E = a;&lt;br /&gt;I = 2,&lt;br /&gt;E = b;&lt;br /&gt;I = 3,&lt;br /&gt;E = c&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;だが注意しなければならないのは、これはあくまで小手先のテクニックに過ぎない点である。このように、一つの述語の中に複数の論理が混在することはあまり望ましくない。双方向性がいつでも必要となるわけではない。寧ろプログラムの開発過程では想像だにしない（仕様として把握しきれていない）実行パスを生み、デバッグを困難にする。必要だと判断する限りに留めるべきである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-6097400508635017135?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=6097400508635017135' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6097400508635017135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6097400508635017135'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/07/loop-fusion.html' title='Loop fusion'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-8514106007004357059</id><published>2008-07-04T22:45:00.003+09:00</published><updated>2008-07-04T23:22:36.996+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='governance'/><title type='text'>Poland missile base</title><content type='html'>&lt;a href="http://www.ft.com/cms/s/0/7cb90884-4889-11dd-a851-000077b07658.html"&gt;Tentative deal for US missile base in Poland (Financial Times)&lt;/a&gt;&lt;br /&gt;今年初頭から長く議論の続いていた、ポーランドにアメリカのミサイル防衛装備を10基配備するという取引が、いよいよ締結される模様である。&lt;br /&gt;&lt;br /&gt;ポーランドという国は政治的にはロシアに対して明確な姿勢を強いてはいるものの、実質的な防衛面では圧倒的に不利な地理にある。たとえEU諸国が支援しようとも、被害が直接的に最も早く集中することは目に見えている。その中でアメリカの防衛構想に組するというのであれば、なおさらロシアからの圧力を感じないわけがない。既にロシアは天然ガスのパイプラインをポーランド主軸ではなくカスピ海から中東経由で行うというプランも立てている。&lt;br /&gt;&lt;br /&gt;一方のアメリカは次期大統領に政権が移る前にこの条約を結ぶ必要があった。条約の詳細は明らかにされていないが、ポーランド側の決して安くはない要求額を呑んだことだろう。早ければ翌週には、訪欧予定のCondoleezza Riceが条約を締結する見込みである。次期大統領候補の一人Barack ObamaはBill Clinton同様に対外政策では強気に出るはずがない、少なくとも民主党は年間で$110億のミサイル防衛予算に対してかなり懐疑的な意見を持っているからだ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-8514106007004357059?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=8514106007004357059' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/8514106007004357059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/8514106007004357059'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/07/poland-missile-base.html' title='Poland missile base'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-8301513323611348122</id><published>2008-07-04T18:28:00.004+09:00</published><updated>2008-07-04T22:34:11.336+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>Gates may be gone, but the walls and bars</title><content type='html'>&lt;a href="http://news.bbc.co.uk/2/hi/technology/7487060.stm"&gt;It's not the Gates, it's the bars (BBC)&lt;/a&gt;&lt;br /&gt;B.Gatesの退任について数多くの人がコメントを出しているが、これが最も面白いコメントだろう。MITのAIラボで頬を濡らしFSFを今なお牽引しているあのRichard Stallmanのコメントである。なんというか、これはまぁBBCくらいしか載せないだろうなと思わないでもない。以下訳文、かなりテキトー。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Bill Gatesの退任に気を注ぐばかりに、重要な事を見逃している。本当に問題なのはGatesじゃない、Microsoftでもない、非倫理的に制限を課してくるシステムであり、Microsoftやそれに類する多くのソフトウェア企業が顧客に虐げてきた行為である。&lt;/blockquote&gt;&lt;br /&gt;このように言ったら皆さんを驚かすかも知れませんね、だってコンピュータに興味を持つ多くの人々は&lt;br /&gt;Microsoftに強い思い入れがあることでしょうから。ビジネスマンや飼い犬である政治家たちは多くのユーザを従えた帝国を築いた業績に賞賛を浴びせます。この分野の外に居る方々は、コンピュータを安く速くそして便利なGUIを用意してくれるMicrosoftの先進性を信頼しています。&lt;br /&gt;&lt;br /&gt;Gatesの発展途上国に対する健康医療分野での慈善事業は、幾らかの人々から賛同を得ました。LA Times誌は彼の基金が年間5-10%を活動に投じ、残りを企業の研究開発に投じていると報じました。でもその企業はそういった途上国で非難を受け、時には問題視されている疑いもあります。&lt;br /&gt;&lt;br /&gt;多くのコンピュータ関係者は格別にGatesとMicrosoftを嫌っています。山ほど理由があるのです。&lt;br /&gt;&lt;br /&gt;&lt;cite&gt;「資金調達」&lt;/cite&gt;&lt;br /&gt;Microsoftは継続的に競合へ圧力をかけ、現に過去三度も有罪判決を受けています。二度目の判決に際して免責を働きかけたGeorge W.Bushは、2000年度の選挙においてMicrosoftから多額の資金提供を受けています。&lt;br /&gt;多くのユーザが"Microsoft税"を嫌っています。リテール品のコンピュータを買うと、例えWindowsを使わなくともその代金を支払わされるのです。&lt;br /&gt;&lt;br /&gt;またDigital Restrictions Managementという機能は、貴方のファイルに貴方が自由にアクセスすることを禁止するためのものですが、これは制限の増えたVistaの中でも飛びっきりの新機能です。&lt;br /&gt;&lt;br /&gt;&lt;cite&gt;「不当な非互換性」&lt;/cite&gt;&lt;br /&gt;そして不当な非互換性、他のソフトウェアとの相互運用が妨げられる問題があります。このためにEUはMicrosoftにインタフェース仕様の公開を要求しました。これを受けてMicrosoftは今年、文書に関するごつくて不明瞭で実装不可能な特許付きのオープン仕様をISOに通すため、これれを支持する委員たちを標準化委員会に送り込みました。EUは現在この件を調査しています。&lt;br /&gt;&lt;br /&gt;これらの行為はもちろん容認し難いことです、でもそれはただ別々に起こったというわけではないのです。これは多くの人々が気付いていないより深遠な問題がもたらしている症状なのです。独占的ソフトウェアという問題です。&lt;br /&gt;&lt;br /&gt;Microsoftのソフトウェアはユーザを分け隔て不自由に縛り付けるライセンス下で配布されています。ユーザは他人とコピーを共有出来ないために分断されます。ユーザはプログラマが読書きの出来るソースコードが提供されないために不自由を被ります。&lt;br /&gt;&lt;br /&gt;もし貴方がプログラマでソフトウェアを変更したいとしても、貴方も他の誰もそれが出来ないのです。もし貴方がビジネスマンで必要に適したソフトウェアに変更するためにプログラマを雇いたくとも、それは出来ません。貴方の友達とコピーを共有すれば、それがたとえ隣人との親睦行為であっても、彼らは貴方を"海賊"と呼ぶでしょう。&lt;br /&gt;&lt;br /&gt;&lt;cite&gt;「不公平なシステム」&lt;/cite&gt;&lt;br /&gt;Microsoftは私たちが隣人にする慈善行為を、他の船を攻撃するような非道徳的行為だと看做します。重要なことはMicrosoftがこのような不平等な社会システムを促進してきたということです。コピーソフトを共有したユーザを叱責した悪名高い公開文書で、Gatesは個人的に認知されています。その文書はこんな趣旨の内容でした。&lt;br /&gt;&lt;blockquote&gt;もし僕が君たちを分け隔て、不自由にする事を拒むならば、もうソフトウェアを書かないし君は二度と手にする事が出来ないだろう。　僕に明け渡すか、君が消え去るかだ！&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;cite&gt;「システムを変えよう」&lt;/cite&gt;&lt;br /&gt;Gatesが独占的ソフトウェアを発明しなかったとしても、他の数千という企業が同じことをするでしょう。それは間違っているのです、誰がやったとしても。Microsoft、Apple、Adobe、そして他の残りの企業が貴方にソフトウェアを提供してきます。そのソフトウェアを貴方が買うことで、彼らはより力を付けていくのです。役員や企業が変わることは大して重要ではないのです。このシステムを変えなければなりません。&lt;br /&gt;&lt;br /&gt;それがフリーソフトウェア運動の全てなのです。「フリー」とは制限の無い自由、共有や改変が自由に出来るソフトウェアを書いたり公開する世界です。&lt;br /&gt;&lt;br /&gt;私たちは自由のために、組織的な取組みを、ある者は報酬を得、またほとんどの者はボランティアで、活動しています。私たちは既にGNU/Linuxというフリーなオペレーティングシステムを完成させました。&lt;br /&gt;&lt;br /&gt;1984年、私がフリーソフトウェア運動を始めた頃、Gatesの手紙にはほとんど気を止めませんでした。でも他にも幾つか似た要求が来たものですから次のように返事をしました。&lt;br /&gt;&lt;blockquote&gt;貴方のソフトウェアが私たちを分け隔て不自由に縛り付けるなら、どうぞもう書かないで下さい。　それが無くっても私たちは上手く行ってます。コンピュータの別の使い方を見つけ、自由を守り通すでしょう。&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;1992年、Linuxカーネルの導入によってGNUオペレーティングシステムが完成した頃はまだ、それを利用出来るのはコンピュータウィザードに限られていました。今やGNU/Linuxはユーザフレンドリーで、スペインやインドの一部では学校の標準OSとなっています。数千万の人々が世界中でそれを使っています。貴方も使えるのです。&lt;br /&gt;&lt;br /&gt;門は崩れ去ったかも知れませんが、Gatesが築いた独占的ソフトウェアの壁は未だ高くそびえています。この壁を取り壊すとき、私たちはより高みに上るのです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-8301513323611348122?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=8301513323611348122' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/8301513323611348122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/8301513323611348122'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/07/gates-may-be-gone-but-walls-and-bars.html' title='Gates may be gone, but the walls and bars'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-874684572347255407</id><published>2008-07-02T21:22:00.005+09:00</published><updated>2008-07-03T20:02:02.468+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>Loop-macro on Prolog</title><content type='html'>&lt;cite&gt;Joachim Schiimpf, Logical Loops, in 18th International Conference ICLP 2002, Copenhagen, Denmark, pg 224-238, Springer-Verlag, 2002.&lt;/cite&gt;&lt;br /&gt;反復的な処理をPrologで記述する場合は再帰を使う。その際にはわりとお定まりの形式で幾つか述語を余計に用意してやる必要があり、書く方は若干の疎ましさを感じないわけでもない。LISP系言語であればマクロを利用してパターンを展開するであろうが、Prologも同様である。簡単な例を挙げると、次のような展開が欲しい。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% BEFORE&lt;br /&gt;?- write('L: '), (foreach(X, L) do write(X), write(' ')).&lt;br /&gt;&lt;br /&gt;% AFTER&lt;br /&gt;temp_aux([]) :- !.&lt;br /&gt;temp_aux([X | T]) :- !, write(X), write(' '), temp_aux(T).&lt;br /&gt;?- write('L: '), temp_aux(L).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;複数の処理をまとめて一回の反復処理とする為に、述語do/2の右辺は結合性を持つ必要がある。演算子テーブルには次のように登録する。&lt;br /&gt;&lt;pre&gt;:- op(1100, xfy, do).&lt;/pre&gt;&lt;br /&gt;続いて反復の度に束縛の実体を変更する必要があるので、引数と展開する反復とをセットにして再帰処理に持たせてやる。&lt;br /&gt;&lt;pre&gt;(foreach(E, L) do Template) :- !, do_loop(L, iter(E, Template)).&lt;/pre&gt;&lt;br /&gt;各反復はリストの中身を一つづつ取り出して、これを変数に束縛し、再帰する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;do_loop([], _Template) :- !.      % 終了条件&lt;br /&gt;do_loop([Value | Rest], Template) :-&lt;br /&gt;    !, copy_term(Template, Copy), % 反復毎に束縛する環境は複製する&lt;br /&gt;    Copy = iter(Value, Goals),    % 単一化で引数にヘッドで取出した値を束縛&lt;br /&gt;    call(Goals),                  % 処理を実行&lt;br /&gt;    do_loop(Rest, Template).      % 再帰&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;反復処理のコピーに対して束縛を行う事がポイントである。copy_term/2は必ずユニークな変数を割り振ってくれるので、いわゆる健全なマクロが実現される。foreach/2はかなり単純な処理であるからメリットは弱いかもしれないが、for-macroも同様の手法で作成出来る。do/2を汎用化して色々な反復子を許可したい場合は次のような一般化を行うのが定石である。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(Spec do Template) :-&lt;br /&gt;    get_spec(Spec, Env, Iterator), !,&lt;br /&gt;    do_loop(Env, iter(Iterator, Template)).&lt;br /&gt;&lt;br /&gt;get_spec(foreach(E, L), L, E)) :- !.&lt;br /&gt;get_spec(for(Init, Cond, Succ), ..) % 若干複雑なので略&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;マクロがLISPの専売特許だと思うのは井の中の蛙である。しかしPrologの問題はパフォーマンスである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-874684572347255407?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=874684572347255407' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/874684572347255407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/874684572347255407'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/07/loop-macro-on-prolog.html' title='Loop-macro on Prolog'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-3465688674149241538</id><published>2008-06-30T15:33:00.004+09:00</published><updated>2008-06-30T16:34:09.413+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>効率的なProlog: 実践ガイド</title><content type='html'>&lt;a href="http://www.ai.uga.edu/ftplib/ai-reports/ai198908.pdf"&gt;Efficient Prolog: A Practical Guide (filetype:pdf)&lt;/a&gt;&lt;br /&gt;こういったTips集が書籍でもネットでも手に入り辛くなっているのもProlog不人気の一因であろう。これを読むと論理的というより処理系の実装レベルの話に思えるかもしれない（事実そう書いてある）のだが、計算機の効率とは要はそういう事なのであって、Prologも他の言語と同様である。&lt;br /&gt;&lt;br /&gt;&lt;cite&gt;``効率的なProlog: 実践ガイド''&lt;/cite&gt;のまとめ&lt;br /&gt;&lt;dl&gt;&lt;br /&gt;&lt;dt&gt;1.宣言的であると同様に手続き的に考える&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;時にはホーン節を手続き的に考えることで、無限ループを回避出来る&lt;br /&gt;ancestor(A,C):-ancestor(A,B),ancestor(B,C). は宣言的には正しいが、&lt;br /&gt;手続き的に読めば ancestor(A,B) が ancestor(A,C) と単一化してループする&lt;br /&gt;ancestor(A,C):-parent(A,B),ancestor(B,C). は手続き的に正しい&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;2.狭く探す&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;a(X)が1000候補、b(X)が10候補の述語の場合&lt;br /&gt;a(X),b(X) よりも b(X),a(X) の方が検索する幅が狭い&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;3.単一化で済ます&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;length(L,N),N=3 よりも length(L,3)&lt;br /&gt;length(L,3) よりも has_tree([_,_,_])&lt;br /&gt;後述する理由から単一化で処理する方が速い&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;4.assert/retractは避ける&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;知識ベースの変更は遅い、さらにプログラム全体の論理が変わり誤動作を生む&lt;br /&gt;一時的な情報は引数に渡し、assertは知識ベースの拡張（学習）に使う&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;5.トークン化を理解する&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;Prologプログラムの内部表現は他の言語とかなり異なる&lt;br /&gt;プログラムは知識ベースのデータであり、数値かアトムか構造で構成される&lt;br /&gt;数値は整数/小数のバイナリ表現&lt;br /&gt;構造は参照スロットの配列と配列の長さおよび配列の先頭への参照&lt;br /&gt;アトムはシンボルテーブルに登録された表現文字列への参照（ハッシュキー）&lt;br /&gt;特にアトムは同じ表現なら全て同じ参照で実装されるので、&lt;br /&gt;f('This atom contains a long long sentence of which ..',&lt;br /&gt;&amp;nbsp;&amp;nbsp;'This atom contains a long long sentence of which ..',&lt;br /&gt;&amp;nbsp;&amp;nbsp;'This atom contains a long long sentence of which ..').&lt;br /&gt;という構造は f(a,b,c) より小さな実装となる可能性が高い&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;6.ストリング処理は避ける&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;文字列は数値（ASCIIやUNICODEなど）のリストとして表現される&lt;br /&gt;リストは構造の一種で "abc"=[97,98,99]=.(97,.(98,.(99,[]))) のように実装される&lt;br /&gt;ただしリスト構造は多くの処理系で上手く実装（最適化）される&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;7.末尾再帰を使う&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;ゴールの最後かつ、候補の最後かつ、サブゴールの他の候補が無い所で再帰する&lt;br /&gt;こうするとバックトラック用にスタックを消費することなく再帰出来る&lt;br /&gt;カットを使うとなお良い&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;8.並びを気にする&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;f(a,x).&lt;br /&gt;f(b,x).&lt;br /&gt;f(c,x).&lt;br /&gt;は&lt;br /&gt;f(x,a).&lt;br /&gt;f(x,b).&lt;br /&gt;f(x,c).&lt;br /&gt;より早い、これは末尾再帰述語のヘッドの並びにも影響する&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;9.モード宣言を使う&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;変数のインスタンス化の向きは、宣言出来るなら行う&lt;br /&gt;:- mode capital_of(+,-).&lt;br /&gt;capital_of(georgia,atlanta).&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;10.リストの頭で済ます&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;リストの効率が良いのは（直接参照が効く）先頭の要素に限る&lt;br /&gt;そうでない部分の単一化はバックトラックの可能性がある&lt;br /&gt;末尾再帰のつもりでそうなっていない場合に注意&lt;br /&gt;有名な例はリストの逆順を定義する述語である&lt;br /&gt;reverse([],[]).&lt;br /&gt;reverse([H|T],Result):-reverse(T,ReversedT),append(ReversedT,[H],Result).&lt;br /&gt;上記は末尾再帰でなくコンシングが多発する&lt;br /&gt;fast_reverse(List1,List2):-fr(List1,[],List2).&lt;br /&gt;fr([Head|Tail],SoFar,Result):-fr(Tail,[Head|SoFar],Result).&lt;br /&gt;fr([],SoFar,SoFar).&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;11.コンシングを避ける&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;Prologに限った事ではないが、新しくオブジェクトを作るにはコストがかかる&lt;br /&gt;append等のリスト処理で、再帰のたびにコンシングするのは非効率である&lt;br /&gt;差分リスト f([a,b|X],X) を使うことでコンシングを回避出来る&lt;br /&gt;差分リストとはLISPのRPLACDである、ただしRPLACA相当の作業はコンシングを起こす&lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;12.まとめ&lt;/dt&gt;&lt;br /&gt;&lt;dd&gt;High-level languageでも最適化時にはLow-levelを考える&lt;dd&gt;&lt;br /&gt;&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-3465688674149241538?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=3465688674149241538' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3465688674149241538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3465688674149241538'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/prolog_30.html' title='効率的なProlog: 実践ガイド'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-276600907086421264</id><published>2008-06-30T12:39:00.002+09:00</published><updated>2008-06-30T12:47:23.712+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='governance'/><category scheme='http://www.blogger.com/atom/ns#' term='economy'/><title type='text'>ロマンを追う男</title><content type='html'>これはかつて旧日本海軍の二等航海士だった御人から窺った話である。その歳を考慮してみれば幾らか事実とは異なるのかもしれない。しかし民間で航海士を務めた他の方からもある程度は同意があったという事は前もって補足しておこう。&lt;br /&gt;&lt;br /&gt;古くから船乗りは男であった。そして今も基本的にはそうである。というのはそれが大変効率的であるからだ。恐らくこれは誤解を呼ぶ点であるから説明する必要があるだろう。たとえば大型船における何かしら（操船なり機関室なり）の船員資格を取る事に男女の区別は無い、しかし実務に際してチームが組まれることは非常に稀有なのだ。海に居る限り産休は無いからである。また狭い空間に装備を敷き詰めた船内に、男女の区別を要する設備もまた贅沢なのだ。海という自然と向き合っている限り万事が万事であり人の都合は存在しない。怪我人が出ようが港には戻れない。そこは純化されたリアリズムの支配する世界なのである。&lt;br /&gt;&lt;br /&gt;自然と対峙する為のリアリズム、これが海の仕事を司る行動原理である事は想像に難くない。その中にあっては人は船を機能させる歯車の一つでなければならない。どんなに人間関係が悪かろうとも、港を離れる準備が始まれば分担に従って速やかに行動する。これを律するために階級が存在し、上に立つ者の裁量が試される。昨今の日本船舶の船員は外国人を雇う場合が多いそうだが、一昔前は刺青を入れた者が多かったそうである。休憩中に甲板を散歩していれば突然後ろから殴りかかられることもある、特に上官は。そこで上官が示さねばならないのは力なのだそうだ。この人には逆らわない、信頼できる、という&lt;q&gt;無保証な信用&lt;/q&gt;を獲得するためには、力を力でねじ伏せ、言葉は言葉で論破する器が求められる。そうやって築かれる階級のピラミッドが、嵐や違法な連中などから荷を守りぬき、船員たちを安全に帰宅させることを可能にする。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jda-trdi.go.jp/j/news/atago/index.html"&gt;護衛艦「あたご」と漁船「清徳丸」の衝突事案&lt;/a&gt;&lt;br /&gt;船乗りにとってこの海域は&lt;q&gt;操船の腕が試される難しい領域&lt;/q&gt;だそうである。自衛艦（またかつては旧日本海軍）などの大型船舶の航路上は排出物の影響で魚が集まりやすい。そのため多くの漁船は大型船舶の航路上（！）に網をかけて漁をするのである。常識的に考えれば漁船の非常識さが目立つわけだが、彼らには彼らの生活がかかっているし、そのおかげで喰えているのは内地の人間なのだから、大型船舶乗りにとってこれを避けるために操船技術を駆使する事は常識だったのだそうだ。これを考えれば、作業中の漁師は（漁自体非常に忙しい作業なので）船舶の接近に気付く余地は無いし、また護衛艦の航法装置が漁船のような小さな対象を回避するわけもなく、起こるべくして起こった事故であると云うよりあるまい。当然ながら乗船していた自衛隊員の過失である。だが犯罪は言い過ぎにも程がある。&lt;br /&gt;&lt;br /&gt;しかし本当の問題は、船乗りの技術や意識の低下にあるという。その昔、船舶は移動や流通の生命線でありまた防衛行動の明確な表現であった。政府からは手厚い待遇が保証される、と同時に高い精度と質が求められた。つまり優秀な貧乏人が出世する手段は海に出ることだったのである。ところが今や旅行や小型貨物は飛行機が中心となり、船舶の出番は資源輸送くらいしかない。自由経済が謳歌を始めると、資源輸出入企業はより柔軟にコスト削減に乗り出す。出来るだけ安いタンカーを、出来るだけ安い航法装置を、出来るだけ安いスタッフを。そうやって生まれた利益の大部分は陸上で契約書を取りまとめる人間とトレーダーに集中する。船乗りの質が低下するのは自明といえるだろう。&lt;br /&gt;&lt;blockquote&gt;今後も日本で海の事故は増えるでしょうね。悲しい限りです&lt;/blockquote&gt;&lt;br /&gt;こういってはなんだが、今後も海の仕事の価値が向上することは難しいだろう。海上油田やその運搬については改善される可能性が多いにあろうが、それ以外のほとんどの海の仕事の未来は暗い。その分いまの日本は何に力を注いでいるのだろう、という疑問がふっと頭を過ぎるのだった。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-276600907086421264?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=276600907086421264' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/276600907086421264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/276600907086421264'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_30.html' title='ロマンを追う男'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-9089059438588499367</id><published>2008-06-27T23:08:00.002+09:00</published><updated>2008-06-27T23:34:50.534+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ideology'/><title type='text'>一切衆生有仏性、一切衆生無仏性</title><content type='html'>かつて抗州の斉安国師は&lt;q&gt;一切衆生、有仏性&lt;/q&gt;と語った。これの意味するところは、全ての衆生すなわち誰の心にも、仏性が有るということである。竜樹尊者の説くところによれば、仏性とはまさに円月相であり、満月のように虚ろでそしてはっきりと明るいのである。これは仏性が諸相の全分であって、決してこの中のどれかが或いははっきりと存在を知覚出来る物質ではないというのである。よって国師は仏が説く通りに仏法を語ったのであり、全ての衆生は即ち仏性なのであり、草木国土は心であり、日月星辰もまた心であり、仏性とは悉有なのだ。&lt;br /&gt;&lt;br /&gt;大円禅師は&lt;q&gt;一切衆生、無仏性&lt;/q&gt;と語った。これの意味するところは、全ての衆生とはまさに仏性であり、悉有なのであって決してただ一つ有る物では無いのだということである。万有の諸相は全て仏性である。仏はその中を漂う船であり、一時の相は仏性であり、また一時の相は仏性である。透けるが如く過ぎ去るのが仏性であるというのでもない。仏が涅槃に向かうのである。だから仏性は仏法の内にこの世を満たし、衆生が有りなどしないのだ。&lt;br /&gt;&lt;br /&gt;万事がこのようであるから、禅問答はしばしば僧の心を乱すのだ。妄想するなかれ、全ては仏法が定める仏性である。それは点の力学から場の力学へと発想を転換することと同義なのである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-9089059438588499367?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=9089059438588499367' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/9089059438588499367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/9089059438588499367'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_27.html' title='一切衆生有仏性、一切衆生無仏性'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-6318054347165089430</id><published>2008-06-26T14:13:00.004+09:00</published><updated>2008-06-26T15:13:04.639+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='governance'/><category scheme='http://www.blogger.com/atom/ns#' term='economy'/><title type='text'>サンクチュアリ</title><content type='html'>&lt;a href="http://news.bbc.co.uk/2/hi/europe/7473981.stm"&gt;Medvedev: Graft is security risk (BBC)&lt;/a&gt;&lt;br /&gt;国内の汚職問題を言及したメドヴェデフ大統領。外国人記者とは初となるインタビューで、プーチン前大統領との姿勢の違いを述べた。もし二人の間に軋轢があるのであれば北の大地の変化を感じないでもないが、少なくとも現時点では基本的にプーチン政権の最終段階のように受け取られても仕方あるまい。それは表の顔＝メドヴェデフ、裏の顔＝プーチンによる&lt;a href="http://ja.wikipedia.org/wiki/サンクチュアリ_(漫画)"&gt;サンクチュアリ&lt;/a&gt;である。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.moscowtimes.ru/articles/detail.php?ID=368539"&gt;Transcript of Medvedev Interview (Moscow Times)&lt;/a&gt;&lt;br /&gt;穏やかな語り口ではあるものの、メドヴェデフ大統領の狙いは諸外国との協調を通したロシア経済のグローバル化、もっと云えば帝国化にあるのではないかと感じさせるものがある。エネルギー市場の活性化を狙い半ば野放しとなった産業界に対して、プーチンは徐々に法整備と市場の健全化へとステージを移して来た。その最たる現れが、メドヴェデフへの政権交代だろう。商品価格の高騰はエネルギー大国ロシアにとって外国資本の移動を加速する。その流れにあってなお、経済原理に思想を明け渡すことはしないだろう。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ft.com/cms/s/6eb0a7e0-420f-11dd-a5e8-0000779fd2ac.html"&gt;Chubais hits at EU ‘fear’ of Gazprom (Financial Times)&lt;/a&gt;&lt;br /&gt;インフレ傾向が強まるEUはガスプロムにとって重要な市場である。世界需要が中国・インドに傾いている中、EU加盟国が天然ガスの供給量を拡大したいのは間違いないだろう。しかし一方で、加盟国間で収支のバラつきが顕著になってきているEUは簡単に市場の自由度を増やすわけにもいかず苦しい状況にあると云える。かつて急速に経済が立ち上がった国で起こった悲劇のように、自由経済は適切な法整備と制限の補助レールが必要なのだ。果たしてガスプロムの制限解除要求をどの時点で飲むのか。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.moscowtimes.ru/articles/detail.php?ID=368517"&gt;Gazprom Eyes Partners in Korea, Japan (Moscow Times)&lt;/a&gt;&lt;br /&gt;サハリン２の計画見通しについて、韓国・日本に対して説明が行われた。予てより大幅な遅れと費用の増大からロシア経済（及び海外からの投資）のネックと看做されていたサハリンプロジェクトは、早ければ年度末から日本への天然ガス輸出を実現する見込みだと報じた。さらにウラジオストック近辺に第二のプラントを立上げ、韓国へのLNGの提供を計画するらしい。韓国への提供となると問題になってくるのは北朝鮮である。アメリカとの関係に注視しつつというありがちな表明にも、プーチンとの二強体勢では何か奥の手があるのではないかと疑わずには居れない。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ft.com/cms/s/c5a68974-430a-11dd-81d0-0000779fd2ac.html"&gt;BP in standoff with Russian partners (Financial Times)&lt;/a&gt;&lt;br /&gt;イギリスとロシアの合弁という形で設立したTNK-BPはいま株主争いが過熱している。設立当時から持ち分の明確化が叫ばれていた会社だが、ここひと月の紛争は泥沼化しつつある。そして大統領就任後はじめてこの件にメドヴェデフ大統領が明言した。法遵守を訴えた声明の中には、メドヴェデフという存在がロシア政府のどのような構造にあるのかを感じさせるものがあるだろう。またパートナーを正しく選ばなければならないだろうというメッセージが、就任直後にプーチンと舞台に並んだ二人の姿を連想させるのである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-6318054347165089430?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=6318054347165089430' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6318054347165089430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6318054347165089430'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_26.html' title='サンクチュアリ'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-5122672248497562515</id><published>2008-06-25T23:28:00.003+09:00</published><updated>2008-06-26T00:24:17.723+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>Zipper on Prolog</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Zipper_(data_structure)"&gt;Zipper (Wikipedia)&lt;/a&gt;&lt;br /&gt;非破壊な構成を取る場合に、単方向リストだけで全てを賄う事は難しい。リスト中の任意な部分に着目したいし、またその部分を入れ替えたリストが必要になる場合も多い。Zipperはそういったニーズに応えるデータ構造である。或いは非常に資源の限られたハードウェアで巨大なデータを取り扱う場合、オンメモリなページとその前後への参照に対して編集操作をログとして処理する手段は、古くからある一種のZipperだと云えよう。後者は過去の記憶サイズによって非破壊な情報量に限度が伴うことになる。&lt;br /&gt;&lt;br /&gt;PrologもLisp同様にList操作に優れている。パターンマッチの自由度が高い分、より強力だと云える。しかしListだけでは流石に不自由があるのでZipper（やそれの亜種）を用意することは多い。この時に&lt;a href="http://ratiwo.blogspot.com/2008/06/blog-post_23.html"&gt;差分リスト&lt;/a&gt;を使っておくと、割と効率の良い実装となるだろう。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% zipper/2&lt;br /&gt;zipper([[PreHead | Pre], PreTail]:Cursor:[[Next | Rest], RestTail],&lt;br /&gt;       [[Cursor, PreHead | Pre], PreTail]:Next:[Rest, RestTail]).&lt;br /&gt;% create_zipper/2&lt;br /&gt;create_zipper([Head | Rest],&lt;br /&gt;              [[ZPreTail], ZPreTail]:Head:[ZRest, ZRestTail]) :-&lt;br /&gt;    append(Rest, ZRestTail, ZRest).&lt;br /&gt;&lt;br /&gt;?- create_zipper([1,2,3,4,5], Z0), zipper(Z0, Z1), zipper(Z1, Z2), zipper(ZX, Z2).&lt;br /&gt;Z0 = [[_G700], _G700]:1:[[2, 3, 4|_G712], _G712],&lt;br /&gt;Z1 = [[1, _G700], _G700]:2:[[3, 4|_G712], _G712],&lt;br /&gt;Z2 = [[2, 1, _G700], _G700]:3:[[4|_G712], _G712],&lt;br /&gt;ZX = [[1, _G700], _G700]:2:[[3, 4|_G712], _G712].&lt;br /&gt;&lt;br /&gt;?- create_zipper([1,2,3,4,5], Z0), zipper(Z0, Z1), zipper(Z1, P:C:R), zipper(Z, P:1:R).&lt;br /&gt;..&lt;br /&gt;Z = [[1, _G808], _G808]:2:[[1, 4, 5|_G820], _G820].&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ちなみにこの実装だとZipper以上の機能が利用出来る。というのは、先行する差分リストの末尾である本来のリストの先頭に要素を加える事も、後続する差分リストの末尾である本来のリストの末尾に要素を加える事も可能だからである。つまり実を言えばこれは、Prologでの可変長リングバッファーの実装である。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-5122672248497562515?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=5122672248497562515' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5122672248497562515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5122672248497562515'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/zipper-on-prolog.html' title='Zipper on Prolog'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-6274519513357028731</id><published>2008-06-24T13:58:00.006+09:00</published><updated>2008-06-24T17:15:03.740+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='economy'/><title type='text'>石油需給</title><content type='html'>&lt;a href="http://www.nytimes.com/2008/05/12/opinion/12krugman.html"&gt;The Oil Nonbubble (NY Times)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://krugman.blogs.nytimes.com/2008/06/21/calvo-on-commodities/"&gt;Calvo on commodities (NY Times)&lt;/a&gt;&lt;br /&gt;石油価格高騰に関するクルーグマンの指摘は、これが投機筋の買い圧力によるものなら物理的な貯蓄が必要だが（高騰を続けている）ここ数年に渡って棚卸し水準に変化は無いではないか、というものである。これに対しカルボが&lt;q&gt;需要の弾力性が無い場合で考えれば、物理的な貯蓄が無いことこそ価格高騰下でなお流動性がある事の反証だ&lt;/q&gt;と言えば、&lt;q&gt;弾力性が無いって流動性が無い事ですよね？&lt;/q&gt;と返し、&lt;q&gt;指数トレーダは先物を買う事で仮想的に貯蓄を行っている&lt;/q&gt;と反論すれば、&lt;q&gt;先物契約が将来の供給を減らすわけじゃないし、仮想的な貯蓄なんて御座いませんよ&lt;/q&gt;と返す刀で面白い。実際に先物の買い持ちをして現物の高騰が現在まで続いた場合、一体どんな先物契約をしたらアウトパフォーム出来るというのか。また石油現物を buy and hold してる投資家が居るという想像もまた難しいだろう。&lt;br /&gt;&lt;br /&gt;石油価格高騰について私が想像する或いは知る範囲で妥当な分析は、クルーグマンの云うように、これは需給バランスが現状に合わせて次のステージに移行しているという説である。つまり投機筋の悪辣なやり口ではないし、石油資源が枯渇しているわけでもないし、市場が完全にカオスに陥ったわけでもないし、悪の組織が何かを企んでいるわけでもないのである。これが統計的な材料から導けるもっともそうな結論である。&lt;br /&gt;&lt;br /&gt;まず世界の中でこれまで大量に石油を消費してきたグループは、アメリカ・欧州先進国・アジア（特に日本）だが、アメリカを除きこれらの国の消費量は90年代移行一定した水準で推移している。アメリカにしても2000年以降は微増。また一方で石油の産出量は基本的に毎年伸びているし、サウジアラビアは予定より多く産出実績を出している。おまけにOPECによる石油の（推定）埋蔵量は80年代以降増える一方である。そして定性的な判断材料として重要なのが90年代、石油需要は供給とほぼ均衡する形で推移を続け、石油価格は低迷し続けた。&lt;br /&gt;&lt;br /&gt;ところが近年圧倒的に消費量を伸ばしている国がある。インド、ではなくて中国である。ここ8年で10倍近くに増え、既にアメリカの1/3以上の消費量に上る。おまけに中国政府は国内の石油価格をかなり強引に低く抑え続けて来た経緯がある。当然これは内需発展を実現する政策だったわけである。一部の指摘で上がる原油1バレル$200というのは、この要因の上限（おそらく中国の消費量がアメリカ程度になる）として見た数値であろう。先ごろ中国政府は石油価格の値上げを発表した。これによって内需の調整が行われ、石油の買い付けに遊びを持たせようという狙いだろう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-6274519513357028731?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=6274519513357028731' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6274519513357028731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6274519513357028731'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_2383.html' title='石油需給'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-3169153590689289008</id><published>2008-06-24T12:22:00.005+09:00</published><updated>2008-06-24T16:25:53.525+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ideology'/><title type='text'>モダン・ホラー</title><content type='html'>&lt;a href="http://www.amazon.co.jp/dp/B0011XVLDU"&gt;SiCKO&lt;/a&gt;&lt;br /&gt;マイケル・ムーアの作品は一つも見たことがない。ただ紹介動画が店頭で流されていたのを見て気になったのは、果たしてこの人は実は無知なのか激情肌なのかと怪訝に思ってしまった事、と同時に、この映画が世界中でヒットするという情勢に戦慄を禁じえない事だ。&lt;br /&gt;&lt;br /&gt;例えばその時に液晶モニタに映っていたのは、刑務所に向かって拡声器で訴えかける映像で、9.11で怪我を負った人間には（生命保険等の）十分な救済措置が取られていないにも関わらず刑務所の人間は罪を犯してなお衣食住の足りた生活を（我々の税金で）送っているのはどう思う、と云っていた。もし刑務所の人間の良心に訴えかけて更正を願う行為であれば、方法自体の能の無さはともかくとして、分からないでもない。しかし映画の主題や演出からしてそうではないだろう。つまり、罪人に税金を払うより医療制度の充実を図るべきであり、そもそも被害者を生み出す罪人などどうにでもなってしまえ、というのが撮り手のメッセージだと受け取れてしまう。&lt;br /&gt;&lt;br /&gt;罪を犯した者を司法機関が罰し、特定私設で監視のもと更正に勤めさせる、という仕組みは、社会が罪人に与える優しさなのではなく、罪人を生み出した社会（ひいては私たち）のノルマである。罪人がアウト・ローとしてノサバリ、またクタバルことを法治国家は認めていない。犯罪の定義から罰の仔細まで含めて法律なのだから、果たしてどんな絶対者がこの法を超越して罪を取り扱う事が出来ようか。だから刑務所の運営に費用がかかる事も、またその費用が政府の歳入で賄われる事も、さらに私設の中で拷問が行われない事も、その社会に属する人間にとっては（意識しているかどうかに関わらず）承諾事項なのだ。この中でより善い生活を目指して（罪を犯さない或いは犯罪が減る）行動規範を模索していくのが、（こと刑法が目的とする意味での）社会的な発展である。&lt;br /&gt;&lt;br /&gt;前提となる目的意識は（その抽象的な到達点の解釈の自由は）ともかくとして、だがしかし万人の合意による社会規範というのは望まれるものでは"まったく"ない。社会全体が合意することの恐ろしさが人類の歴史では度々証明されてきたにも関わらず、マイケル・ムーアの作品が"世界的にヒットする"という観客の心理構造に私は戦慄するのである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-3169153590689289008?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=3169153590689289008' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3169153590689289008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3169153590689289008'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_24.html' title='モダン・ホラー'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-1984155692900849021</id><published>2008-06-23T23:11:00.004+09:00</published><updated>2008-06-24T00:55:51.980+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>差分リスト</title><content type='html'>Prologの基本的なデータ構造としてリストが利用出来る、という話は間違ってはいないけれども美味しいところを取りこぼしているような気がしてしまう。何故ならPrologの強みは、自由な表記がそのままデータ構造（Structure）として利用可能な点にあるからである。そしてこのStructureは単一化の対象となる。だから&lt;a href="http://ratiwo.blogspot.com/2008/06/prolog.html"&gt;マクロのような事&lt;/a&gt;も、&lt;a href="http://ratiwo.blogspot.com/2008/06/blog-post_17.html"&gt;インタプリタのような事&lt;/a&gt;も簡単に出来るわけである。という事を考えていると、リストを世間一般的な形だけで考えているそのこと自体がもったいないのではないかと思えてくる。&lt;br /&gt;&lt;br /&gt;Prologのリストは標準的な書き方以外でも扱える。それが差分リストである。一般的な書き方をしたリストは、先頭の要素から順序的に要素を取り出す必要がある、と同時にそれがリストというStructureの定義であった。ところでリスト同士であればその前後を接続したとしてもリストである事は想像に難くあるまい。逆に言えば、リストを途中で切断して分かれたものはどちらもリストであるということだ。この観点から定義したリストが差分リストである。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% List A = X - Y, List B = Y - Z&lt;br /&gt;% =&amp;gt; List A+B = X - Y + Y - Z = X - Z&lt;br /&gt;&lt;br /&gt;% diff_append/3&lt;br /&gt;diff_append([Xs, Ys], [Ys, Zs], [Xs, Zs]).&lt;br /&gt;&lt;br /&gt;?- diff_append([[1, 2 | X], X], [[3 | Y], Y], Z ).&lt;br /&gt;X = [3 | Y],&lt;br /&gt;Z = [[1, 2, 3 | Y], Y].&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;あえて手続き的な解釈をすると、リスト末尾に未初期化領域への参照を確保しておくことで、リストの連結を参照先の初期化として意味づける、という事である。こうすることでリストの連結は非常に高速になる、と同時にリストの表示が自由変数混じりとなるデメリット（と考えるかどうかは状況次第だが）もある。&lt;br /&gt;&lt;br /&gt;差分リストを用いてクイックソートを実装してみるとこんな具合になる。クイックソートの処理の大部分が分類した大小要素の連結であることを想像すれば、差分リストの意義は推察されよう。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% diff_qsort/2&lt;br /&gt;diff_qsort(X, Y) :- diff_qsort(X, Y, []).&lt;br /&gt;% diff_qsort/3&lt;br /&gt;diff_qsort([], S, S).&lt;br /&gt;diff_qsort([H | T], S1, S2) :-&lt;br /&gt;    partition(H, T, Low, High),&lt;br /&gt;    diff_qsort(Low, Low1, Low2),&lt;br /&gt;    diff_qsort(High, High0, High2),&lt;br /&gt;    High1 = [H | High0],&lt;br /&gt;    diff_append([Low1, Low2], [High1 | High2], [S1, S2]).&lt;br /&gt;&lt;br /&gt;% partition/4&lt;br /&gt;partition(_H, [], [], []).&lt;br /&gt;partition(H, [E | T], [E | Low], High) :-&lt;br /&gt;    E &lt; H, !, partition(H, T, Low, High).&lt;br /&gt;partition(H, [E | T], Low, [E | High]) :-&lt;br /&gt;    partition(H, T, Low, High).&lt;br /&gt;&lt;br /&gt;?- diff_qsort([8, 4, 1, 5, 6, 9, 0, 3, 2], Sorted).&lt;br /&gt;Sorted = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-1984155692900849021?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=1984155692900849021' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/1984155692900849021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/1984155692900849021'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_23.html' title='差分リスト'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-6401193759945404218</id><published>2008-06-20T15:16:00.003+09:00</published><updated>2008-06-20T16:13:16.617+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>Prologはマクロ</title><content type='html'>&lt;a href="http://groups.google.com/group/comp.lang.prolog/browse_thread/thread/592231c0d080091b"&gt;do something with every element of a list and do it elegantly (comp.lang.prolog)&lt;/a&gt;&lt;br /&gt;当初はmaplist/3かfoldingに関する質問かと思われた投稿だったが、リスト要素に任意の処理手順（複数）を適用する方法についてだと分かり、Jan Wielemaker氏が&lt;a href="http://eclipse-clp.org/software/loops/index.html"&gt;面白い論文とサンプル&lt;/a&gt;を引用してくれた。"任意の処理"を考えている時点で、これは高階論理の問題なわけだが、Prologでもちゃんと（そして簡単に）解決出来る。問題にパフォーマンスが含まれていなければ、だが。&lt;br /&gt;&lt;br /&gt;他の言語ではマクロは一大機能である。幸いにしてPrologでは一大機能ではなく、当然の機能である。のだが、その辺りを解説してくれる書籍が今となっては手に入り難い。マクロ機能は基本的に単一化の恩恵なのだが、感覚的にはC++で演算子オーバーロードとtemplateを多用するものに近いだろう。例えばルールを記述する演算子 :- は ISO Prolog を起動した時点では次のように登録されている。&lt;br /&gt;&lt;pre&gt;op(1200, xfx, ':-').&lt;/pre&gt;&lt;br /&gt;優先度が1200（もっとも低い）で二項演算子で結合性を持たないという意味である。このデータベースは動的に書き換え可能である。これに限らずASCII文字や（対応していれば）UNICODEも全て演算子テーブルに登録可能である。ただし , . ( ) は例外。特に . は consing となる。&lt;br /&gt;&lt;br /&gt;Prologの演算子テーブルの表記は、慣れないとちょっと分かり辛い。二番目の引数は次のような意味に整理される。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; 表記|　　 解釈&lt;br /&gt;-----+---------------&lt;br /&gt; fx  | 前置　 無結合&lt;br /&gt; fy  | 前置　 結合的&lt;br /&gt; xf  | 後置　 無結合&lt;br /&gt; yf  | 後置　 結合的&lt;br /&gt; xfx | 中間子 無結合&lt;br /&gt; xfy | 中間子 右結合&lt;br /&gt; yfx | 中間子 左結合&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;例えば op(1105, xfy, |) というのは、優先度1105で中間演算子として機能し左結合的に解釈される、ので次のような解釈が成立する。表記 | の意味付けは consing で . となっている事に注意されたい。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;?- [Head | [2, 3]] = '.'(1, Tail).&lt;br /&gt;Head = 1,&lt;br /&gt;Tail = [2, 3].&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ちなみにJan Wielemaker氏が紹介してくれた do-macro の書き出しはこんな具合である。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;:- op(1100, xfy, do).&lt;br /&gt;(Specs do PredTemplete) :-&lt;br /&gt;    get_specs(Specs, Firsts, BaseHead, PreGoals, RecHead, AuxGoals, RecCall),&lt;br /&gt;    !,&lt;br /&gt;    call(PreGoals),&lt;br /&gt;    do_loop(Firsts, body(RecHead,(AuxGoals,PredTemplate),RecCall), BaseHead).&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-6401193759945404218?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=6401193759945404218' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6401193759945404218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6401193759945404218'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/prolog.html' title='Prologはマクロ'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-3231313863256991480</id><published>2008-06-20T08:52:00.003+09:00</published><updated>2008-06-20T09:09:46.153+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><title type='text'>SAT is not NP-complete!?</title><content type='html'>&lt;a href="http://arxiv.org/abs/0806.2947"&gt;A Syntactico-Semantical Bi-Polar..&lt;/a&gt;&lt;br /&gt;日本でもつい最近みずで走る車が登場したが、この類のリアルファンタジーは枚挙に暇が無い。これもその一つであるが、もし自分の知らない分野の問題だったりすると真贋は見極め難い（と言っても見た目に怪しさが漂っているのだけど）。ただこの手のリアルファンタジーが孕む誤りの構造は基本的に同じであるので、その点に注意して挑むのが善い。それは、在りもしないことを（本人は気付かずに）使うという誤りである。特に結論を暗に仮定するなど。逆に考えれば、この手のものには驚異的な新発見の一歩手前で猛威を振るっている強力な謎の装置や定理を疑えばよい。そこには結論を真にしうる無限のエネルギーが内在しているのだ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-3231313863256991480?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=3231313863256991480' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3231313863256991480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3231313863256991480'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/sat-is-not-np-complete.html' title='SAT is not NP-complete!?'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-782511182261717061</id><published>2008-06-19T11:53:00.005+09:00</published><updated>2008-06-19T13:27:20.699+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='governance'/><category scheme='http://www.blogger.com/atom/ns#' term='economy'/><title type='text'>大いなる不確定要素</title><content type='html'>&lt;a href="http://www.moscowtimes.ru/articles/detail.php?ID=368372"&gt;Putin Threatens New Power Players (Moscow Times)&lt;/a&gt;&lt;br /&gt;資源政策は現在のロシアにとって生命線と云っていい。国民を付き従え、その道を突き進んできたのはウラジミール・プーチンである。先日のエネルギー会談に際してプーチンは「無責任な行動をとる投資家には真っ向から対抗する」と明言している。資源を取り巻く世界的な状況と、内需の拡大に伴い、ロシア国内のエネルギー資源は市場調整的側面と国策的側面が共に際立つという危うい存在となるだろう。世界諸国はこれを少なからず戦々恐々としながら見ている。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.rice.edu/energy/publications/docs/PEC_Olcott_10_2004.pdf"&gt;THE ENERGY DIMENSION IN RUSSIAN GLOBAL STRATEGY(filetype:pdf)&lt;/a&gt;&lt;br /&gt;プーチンは熱烈な愛国心の保持者であるそうだ。その彼が大統領時代に推し進めてきた政策の中心的なテーマはこの論文で示されている。軍事ではなく、資源戦略によるロシアの発展。石油会社が国有化されていた頃、エリツィン大統領はこれを解体し市場整備への一歩を踏み出した。その当時、プーチンの論文がエリツィンの目に留まったのだ。当初エリツィン政策を支持・支援し、資本家達に歩み寄って資源市場の自由化を進めたプーチン大統領は、手のひらを返したように資本の政府による統制を始める。そして市場化による外国資本の導入と、税制による制限とを巧みな手腕で使い分け、ロシア経済の拡大を実現させていった。その&lt;a href="http://news.bbc.co.uk/2/low/business/7384358.stm"&gt;最終的な段階 (BBC)&lt;/a&gt;が、現メドヴェデフ大統領への政権交代直前に達成されたのだった。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-782511182261717061?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=782511182261717061' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/782511182261717061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/782511182261717061'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_887.html' title='大いなる不確定要素'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-3818509549033543216</id><published>2008-06-19T09:25:00.004+09:00</published><updated>2008-06-19T09:47:34.986+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='governance'/><title type='text'>フランスの防衛体制</title><content type='html'>&lt;a href="http://www.ft.com/cms/s/0/1a213a74-3d4a-11dd-bbb5-0000779fd2ac.html"&gt;Knowledge holds the key to French defence (Financial Times)&lt;/a&gt;&lt;br /&gt;フランスが防衛と国家安全保障を統合するとのこと。運用での柔軟な、悪く言えば非論理的な判断を嫌うフランスの国民性が現れているような方針だ。ルールを周知させそれに従う。変更が必要なら抜本的な改革を行う。なるほどPrologでコーディングをしていると、動的な変更が現れるプログラムはバグを生みやすいが、構造の変化を一時に集約するとバグはかなり回避出来る。&lt;br /&gt;&lt;br /&gt;しかし防衛と国家安全保障が統合と聞くと世界大戦を連想してしまう。おそらくこの感覚は、それが対処する敵の構造の類似によるものだろう。大戦時の敵はむろん敵国であり敵の思想であったわけだが、その活動拠点は国外は当然として、国内の潜伏組織にある。これと戦う為に防衛が国家安全保障と情報を共有し連動する必要がある、という状況はそのまま現在の我々が直面している敵に置き換えても云えるのだ。だがこれは国策捜査を助長することにはならないのだろうかという心配がある。ましてや自由の国フランスである。いや或いは、フランスだからこそ自由に伴う責任を強く理解しているのかもしれない。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-3818509549033543216?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=3818509549033543216' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3818509549033543216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3818509549033543216'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_19.html' title='フランスの防衛体制'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-1377449727095570610</id><published>2008-06-18T22:15:00.004+09:00</published><updated>2008-06-18T22:45:39.171+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='governance'/><title type='text'>形勢</title><content type='html'>&lt;a href="http://www.moscowtimes.ru/articles/detail.php?ID=368347"&gt;Kissinger and Blair Warn of Conflict (Moscow Times)&lt;/a&gt;&lt;br /&gt;ロシアの大統領メドヴェデフはかつて、そして今なおプーチンの強い協力者であると見られている。その彼をして、現ロシア政権がプーチン政権から変わるとは考え難いだろう。プーチンの極めて計画的で攻撃的な政策の展開は、ある意味では偉大な成功を収めた。そして資源問題の占めるウェイトが増える程、この国はより強いイニシアティブを持っていくこととなる。東欧から中東に渡る大きなヴェールの向こうには、これまで我が物顔で発展の道を闊歩してきた西欧やアジア諸国を戦慄させる資源と人と社会とが存在している。イスラエルロビーに強固なチャンネルを持っているプーチン政権が、多くの点で有利な立ち位置に居るのである。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://news.bbc.co.uk/2/hi/europe/7459976.stm"&gt;Lithuanian ban on Soviet symbols&lt;/a&gt;&lt;br /&gt;第二次世界大戦からこちら、リトアニアの歴史はまさに激動の一部である。他の東欧諸国に先駆ける形でソヴィエト連邦と離別し、欧州連合に加盟した。ここにはリトアニアの決意が見て取れる。そしてシンボルの使用制限という意思表示だけに留まらず、より明確な行動に出たのである。防衛という形で。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ft.com/cms/s/0/8bbcdf7e-3cb6-11dd-b958-0000779fd2ac.html"&gt;US enters missile talks with Lithuania&lt;/a&gt;&lt;br /&gt;ワシントンが進めるミサイル防衛計画は、リトアニア領に配備できる10基の迎撃装置により大きく前進することになるだろう。冷戦が終わってもなお、合衆国連邦にとっての脅威は東欧から中東にかけての領域、そしてその少し先の部分にある。リトアニア-インド-日本、このトライアングルが如何なる意味を持つののか、推して知るべしである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-1377449727095570610?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=1377449727095570610' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/1377449727095570610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/1377449727095570610'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_2229.html' title='形勢'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-3965957016324552052</id><published>2008-06-18T11:41:00.005+09:00</published><updated>2008-06-18T13:09:56.261+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='economy'/><title type='text'>マルクスの再生産表式はわりと正しい</title><content type='html'>（注：この投稿にはスプーン一杯程度の偏見が入っています）&lt;br /&gt;&lt;br /&gt;カール・マルクスの資本論は文字通りの大著である。本人があの本を手に持てばまさにFinal Fantasyの学者斯くなり也といった感じである。その資本論の中で資本の生産・流通を説明する部分で再生産表式というものが出てくる。労働により生産される財を生産財Iと消費財IIの二つに分け、それを実現するための資源を可変資本v 不変資本c 剰余価値m の三つに分ける。マルクスが云うには、生産された財Iが財IIの生産手段でなくてはならず、そのために財IIの生産に費やされる不変資本が財Iの生産価値と等しくなる状況が単純生産方式である、ということだそうだ。式にすると次のようになる。ここで例えば I/v とは財Iの生産に割当てられる資源の内、可変資本vに属する量を指す。&lt;br /&gt;&lt;pre&gt;I/v + I/m = II/c&lt;/pre&gt;&lt;br /&gt;またもし等式が不等式であり、左辺が大なりとするならば、これを拡大生産方式というのだそうだ。もしこれを一国の経済統計に照らし合わすとどうなるだろうか。2007年の日本のGDPは実質で600兆円弱、計算がメンドクサイから600兆円としよう（経済諮問委員会の予測が十兆円のオーダーで当ることは無いのだよ、諸君）。そうすると、&lt;br /&gt;&lt;pre&gt;600 = I/(v+m) + II/(v+m) = II/c + II/(v+m) = II&lt;/pre&gt;&lt;br /&gt;というわけで消費財の総価値と等しいそうなので、これを適当な比率で各資源に分配してみよう。&lt;br /&gt;&lt;pre&gt;II: 600 = 400(c) + 100(v) + 100(m)&lt;/pre&gt;&lt;br /&gt;ここでは搾取率（聞こえが悪いが要は分配比率であって詐欺発生率ではない）は100%となっている。今の日本の労働人口は6000万人ほどらしいので、一人頭の生産総額は1000万円ほどである。日本の平均年収は500万前後なので、実際の搾取率も (1000-500) / 500 = 100% となってこのままで問題なさそうである（何が？）。もっとも勝手に決めた分配比率は十分に疑う余地があるだろう。何が何やら謎だから。ただし少なくとも搾取率が100%なので不変資本と剰余価値は同じくらいということに違いは無さそうだ。&lt;br /&gt;&lt;br /&gt;ところで、搾取率100%はかなり低い数値だと思うのが私の直感だ。会社の中で具体的に個人が関与して生産出来た収益は、その約2/3が本人の手取りではない。例えば内部保留だったり投資だったり経費だったり税だったり。それが無いと個人はその生産を実現出来なかったコストがその程度なのである。なので、生産額が1000万程度であるなら400万程度の年収が相場だと思うのだが。&lt;br /&gt;&lt;br /&gt;ちなみに、搾取されたお金はどうなるか？それは貴方が使うより賢く社会の為に使われるのである。だってその余剰金が手元にあったら、ブルーレイディスクプレイヤー買ったりゲームしたり乱痴気騒ぎをするでしょう。本当は公共福祉や将来の備蓄に使わないとならんのですよ。もっともモノを買ったり遊んだりすることも蕩尽ではなくメーカーやサービス業を潤すと云えるのであるが、問題はどのセクターにいつどのように影響するのかという点である。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-3965957016324552052?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=3965957016324552052' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3965957016324552052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3965957016324552052'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_18.html' title='マルクスの再生産表式はわりと正しい'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-2546834712503794383</id><published>2008-06-17T22:52:00.003+09:00</published><updated>2008-06-17T23:30:54.627+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>手続きという高階論理</title><content type='html'>Prologのコードには宣言的解釈と手続き的解釈が存在する。そして後者の立場を取るときには注意が必要である。手続きとは、暗黙的に時刻を引数に伴う要素から成る、高階論理（或いは関数）だからである。John MAEDAの有名なプログラムを例に挙げよう。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;10 PRINT "Hello World!"&lt;br /&gt;20 GOTO 10&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;想像してみよう、貴方がもしBASICインタプリタの中の人ならば、このプログラムはまさに貴方の運命である。その結末が如何なるものか、貴方には知りえない。だがもし、貴方がコンパイラであればどうだろうか？それはつまり、コードの外に居るということである。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% basic/1&lt;br /&gt;basic(10) :- write('Hello World! ').&lt;br /&gt;basic(20) :- goto(10).&lt;br /&gt;goto(CP) :- retract(cp(_)), assert(cp(CP)).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;BASICの各ステップはライン番号（仮想的な時刻）を引数にとる論理である。そして一連のステップから構成されるBASICルーチン、つまり手続きはそれのみでは目的を達し得ない。何故ならライン番号の制御について何も言及出来ないからである。そこでコードの外側で、時間を統べる仕組みが要るのである。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;tick :- retract(cp(CP1)), CP2 is CP1 + 1, assert(cp(CP2)).&lt;br /&gt;run :- retractall(cp(_)), assert(cp(0)), run(0).&lt;br /&gt;run(CP1) :- basic(CP1), tick, cp(CP2), run(CP2).&lt;br /&gt;run(_) :- tick, cp(CP), run(CP).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;だがしかし、コンパイラだからと言ってやはりコードの運命を知るのは困難であることに違いは無い。何故ならライン番号以外の動的な要素が、コンパイラには教えられていないためである。仮にこれらの情報全てが与えられた（制限された）とすれば、そのコードはチューリング完全性を失い、計算の停止可能性は知りうるのである。それは大域的情報を局所構造に全て落とし込むことでもある。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-2546834712503794383?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=2546834712503794383' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2546834712503794383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2546834712503794383'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_17.html' title='手続きという高階論理'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-8676769045879104428</id><published>2008-06-17T22:14:00.003+09:00</published><updated>2008-06-17T22:48:49.608+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>Prologでbind</title><content type='html'>慣れた当人にとっては驚くに値しない事も、他人には意外と不思議がられるものである。そしてそういった事は、しばしば否定的な誤解を生んでいたりするのである。気が付いたときには出来るだけ発言しておくようにするのが、人として為すべき事だと思うのである。&lt;br /&gt;&lt;br /&gt;Prologは append/3 を書くには最高で、後は悪くなる一方だと云った人が居るとか居ないとか。しかし中核的な原理である単一化は極めて強力な計算機構なので、実のところほとんどの事が簡単に書けてしまう（むしろ簡単過ぎて解決した気にならない）のである。Haskellで云うun-curryingやC++で云う変数バインドはこんな具合である。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% bind/3&lt;br /&gt;bind(C1, ARGS, C2) :- C1 =.. [F|R], append(R, ARGS, L), C2 =.. [F|L].&lt;br /&gt;plus(X, Y, Z) :- Z is X + Y.&lt;br /&gt;?- bind(plus(1), [2, X], C), call(C).&lt;br /&gt;X = 3,&lt;br /&gt;C = plus(1, 2, 3).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;記述さえ存在すれば、それはパターンマッチによって自由に変換出来る。Prologが新しい言語を作るための言語であると謂われる所以である。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-8676769045879104428?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=8676769045879104428' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/8676769045879104428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/8676769045879104428'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/prologbind.html' title='Prologでbind'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-5878002599514296622</id><published>2008-06-16T12:50:00.003+09:00</published><updated>2008-06-16T13:04:18.092+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>Ypsilon scheme for real-time applications</title><content type='html'>&lt;a href="http://www.littlewingpinball.com/contents/ja/ypsilon.html"&gt;Ypsilon&lt;/a&gt;&lt;br /&gt;ピンボールゲームのために作ったScheme処理系らしい。そういった事例は商業に限らなければ数多くあっただろう、しかしこいつはかなり本気である。なんたってリアルタイムアプリケーション向けに作った&lt;q&gt;mostly concurrent garbage collection&lt;/q&gt;である。mostlyがどの程度なのかはこれからソースを読むところなわけだけど、世の中まだまだおもしろい人が居るものだな、とちょっと幸せになれたのだった。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-5878002599514296622?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=5878002599514296622' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5878002599514296622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5878002599514296622'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/ypsilon-scheme-for-real-time.html' title='Ypsilon scheme for real-time applications'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-1501027536887333291</id><published>2008-06-13T14:48:00.001+09:00</published><updated>2008-06-13T14:50:35.991+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='finance'/><title type='text'>米地方債格付けの行方</title><content type='html'>&lt;a href="http://www.nytimes.com/2008/06/13/business/13moodys.html"&gt;Municipal Debt Ratings (NY Times)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ratiwo.blogspot.com/2008/05/blog-post.html"&gt;債券格付けについて問われたMoody's&lt;/a&gt;だが、米地方債の格付けについて私企業の場合に近い評価を行う見通しだ。近く、多くの地方債券は1ランク格付けが上がるとのことである。これは、カリフォルニア州をはじめ幾つかの州が申立を行ったためである。一点は、公的な発行体が不履行となる確率は企業のそれに比して低いという点。またもう一点は、低い格付けを与えられた為に自治体は保険の購入を強いられ、結果としてより低い利回りの債券を発行する事になり、財政の改悪を招くというものだ。&lt;br /&gt;&lt;br /&gt;一点目について、公的発行体が私企業より信用があるかどうかはかなり怪しい。南北戦争の時代、各地方自治体は借金漬けで、定期的にイギリスはシティの銀行家の下へ頭を下げに行っていたのは有名だし、現に今もカリフォルニア州の財政状況は決して良いとは言えない。これについて評価の基準が辛いというのは一概に頷けるものではない。&lt;br /&gt;&lt;br /&gt;もう一点について、公的であるがために私企業とは異なった動機が存在し、そのためにポートフォリオの運用には違う、具体的には利払いについて寛大な、評価が必要だというのは理解出来る。そもそも地方自治体に対して分配金を要求するものは居ないだろうし、また地方自治体が証券化されることを望むものも居ないであろう。彼らは歳入を公共に返し、それによる地方経済の活性化などを望んでいる。だから赤字運営を十把一絡げに一刀両断するのは問題だ。&lt;br /&gt;&lt;br /&gt;S&amp;PとFitch Ratingsはこれに続くだろうか。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-1501027536887333291?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=1501027536887333291' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/1501027536887333291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/1501027536887333291'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_13.html' title='米地方債格付けの行方'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-4529866778412100997</id><published>2008-06-13T11:40:00.004+09:00</published><updated>2008-06-13T12:20:21.894+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='economy'/><title type='text'>Search the median!</title><content type='html'>&lt;a href="http://www.nytimes.com/2008/06/06/opinion/06tyson.html"&gt;Vote by Numbers (NY Times)&lt;/a&gt;&lt;br /&gt;大統領選の予測として中間値が有効なのではないか、という話。この手の議論は大統領選に限らず色々な事象で展開されているので、嗚呼またか、と思うのである。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Cauchy_distribution"&gt;Cauchy Distribution (Wikipedia)&lt;/a&gt;&lt;br /&gt;分布には様々なデモルが存在するが、中でも扱いのやっかいなものがコーシー分布である。統計量を特徴付けるモーメントのほとんどが定義出来ない為である。分布におけるモーメントとは、連続関数における微分量のようなもので、一次モーメントが平均値、二次モーメントが分散、三次モーメントが歪度、四次モーメントが尖度と続く。歪度は軸対称からの歪みを、尖度は分布の尖りを表す量である。コーシー分布ではこれらの量が有限に定まらないための技術的困難が潜んでいる。しかしそれであっても、中央値は定義出来るのである。いや、そもそも何かしら統計を行えば中央値はかならず定義出来るに決まっている。&lt;br /&gt;&lt;br /&gt;事例ごとに異なる値から最汎的な（人工的な）値を作り出すことは用意ではない。しかし、あらゆる事例に共通する値は手を加えることなく全ての事例で一致する。というのはまるで、&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;世界中の人の肌の色から人を総称するために共通項を探すのは難しい&lt;br /&gt;しかし、世界中の人を総称するのに「人」という語を用いてはどうか？&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;と言っているようなものなのだ。だから一般の予測について、中央値を参考にするのはある意味当然のアプローチなのである。そしてそれが、概ねの参考値を知りたいだけであればなお更の事である。統計的な参考が欲しい時に人が期待するのは"そこそこ"分布の山の辺りの値であって、裾の彼方ではないのだから。&lt;br /&gt;&lt;br /&gt;ところで中央値を利用した大統領選の予想では今のところ&lt;a href="http://www.colleyrankings.com/election2008/"&gt;McCain上院議員が有力&lt;/a&gt;なようだ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-4529866778412100997?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=4529866778412100997' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/4529866778412100997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/4529866778412100997'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/search-median.html' title='Search the median!'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-2584583844640296230</id><published>2008-06-12T11:58:00.002+09:00</published><updated>2008-06-12T12:03:36.113+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ideology'/><title type='text'>変遷</title><content type='html'>&lt;blockquote&gt;``罪を憎んで人を憎まず''&lt;/blockquote&gt;&lt;br /&gt;私にとってこの言葉の意味は長くかけて変遷してきた。子供の頃、私が通う学校では道徳教育という不可思議な授業があった。ちなみにその授業は嫌いだったのだが、おそらくこの言葉はその頃に初めて聞いたのだろう。その時に得た知見は、これは性善説に基づく行動原理なのだろうということだった。人を憎しみの対象とせずに努めることが美徳であり、善き市民ひいては善き社会に欠かせないのだと。&lt;br /&gt;&lt;br /&gt;しかし歳を経て、世の中の現実に触れ、そして何より空回りする体力を得るにつれ、人が人らしく生きるというのは感情の発露が理と結び付くことにあるはずだ、という考えて変わっていった。つまりは、性善説など信じるに足らないし、それを万人の行動原理としたところで社会が生まれるわけないのだと。だから市場原理こそが唯一の足枷となるべきだと思ったのだ。&lt;br /&gt;&lt;br /&gt;ところが最近、この言葉は全く違う原理から出てきたのだと思うようになってきた。省かれた主語は何か、貴方かあるいは私か。いずれにしろ最汎的には人であろう。つまり&lt;q&gt;人であれば、他人を憎まずかつその他人の為す罪を憎む&lt;/q&gt;である。これは論理的な一命題に過ぎないのではないだろうか。もし&lt;q&gt;人が人を憎めるとする&lt;/q&gt;と、それは人が悪を孕み悪を為すという事である。しかし悪を孕み悪を為す者にとっては一体なにが罪であろうか。もしそのような者の存在を認めるならば、悪はその者の本質に過ぎない。あたかも熊が魚を捕食し、あたかも虎が子牛の臓物を貪り、あるいはあたかも人が牛を喰らうように。それは自然の法であり、傍から見れば悪は事故であり、そして人の為す罪とはならない。牛を食う人が、牛を食う他の人に対し、どのような理屈をつけて牛を食うことを憎めるのか。最初の仮定&lt;q&gt;人が人を憎めるとする&lt;/q&gt;は矛盾を導くから、これを否定しなければならないのである。或いは、&lt;br /&gt;&lt;blockquote&gt;``その人を憎むかその人の為した罪を憎まないならば、それは人ではない''&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-2584583844640296230?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=2584583844640296230' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2584583844640296230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2584583844640296230'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_12.html' title='変遷'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-38069977982196586</id><published>2008-06-11T12:01:00.002+09:00</published><updated>2008-06-11T12:04:58.683+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>ちく、たく、ちく、たく、</title><content type='html'>&lt;a href="http://dev.emcelettronica.com/timer-and-timers"&gt;Timer and Timers&lt;/a&gt;&lt;br /&gt;一般的なプロセッサにタイマは精々1つか2つしか乗っていない。アプリケーションではソフトウェアタイマを使ってね、という話。ハードウェアタイマをベースとして、その整数倍間隔でソフトウェアタイマの割込みが可能である。用意する場所は（もしあれば）カーネルなどの、タスク間で共有される権限領域で、だ。論理回路を組んだ経験があれば常識的な事ではあるが、そうでなければ謎の知恵だと感じる人も居るかもしれない。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.intel.com/technology/architecture/hpetspec.htm"&gt;HPET Specification&lt;/a&gt;&lt;br /&gt;ちなみに最近のPCはx86アーキテクチャで動いている。こいつ（がintelのそれであれば）にはTSC（Time Stamp Counter）というレジスタがあり、電源投入後からCPUに提供されたクロック数をカウントしている。だから時間は(クロック間隔程度には)正確に測ることが出来る。そしてこの値に、タイマ間隔をクロック周波数で割ったクロック数を足し、HPET（High Precision Event Timer）のトリガにセットする。HPETは64-bitトリガレジスタとコンパレータから成り、クロックジェネレータの信号を受けてアップカウントされるレジスタを一定時間(10MHz以上)ごとにトリガと比較して、設定されたクロック数を過ぎると割込み信号を発生する。もっともこの機構が利用出来るOSは、MacOSXが10.4以降、FreeBSDが6.3以降、それにLinuxで2.6以降、WindowsはVista以降なのだが。あとHaiku OSは対応中だ。&lt;br /&gt;&lt;br /&gt;それでも実時間応答はまったく別次元の問題だ。最近の自動車は大抵がコンピュータ制御になっていると思われるが、当然ながらここでは実時間応用が要求される。聞いた話だと、ドイツの某自動車メーカはthreaded-codeのようにタスクを分け、各タスクごとの消費時間を考慮してスケジューリングするのだとか。NASAの遠隔制御系も似たアプローチで設計されるという話だ。なるほどそれは確実な手段だと言えるが、あんまりインテリジェンスな方法ではない。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-38069977982196586?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=38069977982196586' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/38069977982196586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/38069977982196586'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_11.html' title='ちく、たく、ちく、たく、'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-709573639945058986</id><published>2008-06-10T23:21:00.006+09:00</published><updated>2008-06-13T16:43:10.648+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>PrologでPOST</title><content type='html'>SWI-Prologは標準で幾らかのライブラリ（その大半はJan Wielemaker氏による、ありがてぇこってす）が付いてくる、のでtwitterにPOSTくらい訳ないわぃと思ったのだが5分以上かかった。以下、要約。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://watcher.moe-nifty.com/memo/docs/twitterAPI.txt"&gt;twitter API（日本語訳）&lt;/a&gt;&lt;br /&gt;上の記載に従って、まずはBASIC認証でフレンドのタイムラインを取得。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;:- encoding(utf8).&lt;br /&gt;:- use_module(library('http/http_client')).&lt;br /&gt;twitter_account('ユーザ名', 'パスワード').&lt;br /&gt;auth_header(request_header('Authorization' = Value)) :-&lt;br /&gt;    twitter_account(User, Pass),&lt;br /&gt;    format(atom(Codes), '~w:~w', [User, Pass]),&lt;br /&gt;    base64(Codes, Base64Codes),&lt;br /&gt;    format(atom(Value), 'Basic ~w', [Base64Codes]).&lt;br /&gt;friends_timeline(Response) :-&lt;br /&gt;    auth_header(Head),&lt;br /&gt;    http_get('http://twitter.com/statuses/friends_timeline.xml',&lt;br /&gt;             Response, [Head]).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;変数は単一化した後、適当にパースなどする。続いてアップデート。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;update(Msg, Reponse) :-&lt;br /&gt;    % www_form_encode(Msg, Encoded), &lt;- URLエンコードしたら駄目？&lt;br /&gt;    auth_header(Head),&lt;br /&gt;    http_post('http://twitter.com/statuses/update.xml',&lt;br /&gt;              form(['status' = Msg]), Response, [Head]).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;URLエンコードしたらエンコード文字列のまま投稿された。ちなみにレスポンスはutf-8がURLエンコードされて返ってくる。なんで？&lt;br /&gt;&lt;br /&gt;ちなみにSWI-Prolog（と大半のProlog処理系）では、文字は内部データベースのatomとなる。文字コードとして扱いたい場合は atom_codes/2 でatomと文字コードリストを交換する。文字コードをそのまま出力ストリーム（user_outputなど）に流すと対応する文字が表示出来る。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;?- atom_codes('あいうえお', Codes).&lt;br /&gt;Codes = [12354, 12356, 12358, 12360, 12362].&lt;br /&gt;&lt;br /&gt;?- put(12354).&lt;br /&gt;'あ'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ちなみに 12354 = 0x3042 である。そう、この文字コードはUTF-16である。SWI-Prologの文字の内部表現は、実行環境に依存している。そう、私はこれをWindowsXP上で動かしたのだ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-709573639945058986?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=709573639945058986' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/709573639945058986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/709573639945058986'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/prologpost.html' title='PrologでPOST'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-2433706695781490907</id><published>2008-06-09T11:51:00.004+09:00</published><updated>2008-06-09T14:19:22.188+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>再帰論理、ふたたび</title><content type='html'>&lt;a href="http://ratiwo.blogspot.com/2008/06/blog-post.html"&gt;前回（失敗駆動と再帰論理）&lt;/a&gt;、失敗駆動ループを再帰論理に書き換えることで計算コストの見通しをすっきりさせると述べた。&lt;br /&gt;&lt;br /&gt;しかし失敗駆動ループと違って、再帰論理はバックトラック時の継続を再帰の度に確保する必要があり不効率である。そのために!（カット）を挟んだのである。一般的に再帰構造が、反復よりコストを伴うのは紛れもない事実である。だが同時に、不効率な部分を!（カット）がそぎ落とす際の作法を、最適化の構造として一般化出来るのである。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Tail_recursion"&gt;Tail recursion&lt;/a&gt;&lt;br /&gt;Schemeと違いPrologの仕様に末尾再帰最適化は存在しないが、その主旨は概ね流用可能である。入力文字列をリストとして認識する readline/1 を例に見てみよう。まずは"らしくない"例。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% readline/1&lt;br /&gt;readline(Cs) :- readline(_, Cs).&lt;br /&gt;% readline/2&lt;br /&gt;readline(C, [C|Cs]) :-&lt;br /&gt;    get0(C),&lt;br /&gt;    (terminal(C) -&gt; Cs = [];&lt;br /&gt;     readline(_, Cs)).&lt;br /&gt;% terminal/1&lt;br /&gt;terminal(46).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;入力バッファの終端判定は terminal/1 で行うものとする。ここではピリオド(. ASCIIで46)とした。副作用を伴う述語 get0/1 があるので、この部分はバックトラック出来ない。&lt;a href="http://ratiwo.blogspot.com/2008/06/blog-post_03.html"&gt;以前の話&lt;/a&gt;にある通り、I/Oの出入り口ではそれを捕獲するバッファを用意する。そこで readline/2 では入力毎に終端判定を行い、バックトラックせずに新しい環境フレームをスタックに積んで、文字を繋げていく。&lt;br /&gt;&lt;br /&gt;readline/2 の記述は些か手続き的過ぎる嫌いがあるので、もう少し宣言的に書き下そう。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;readline(C, []) :- get0(C), terminal(C).&lt;br /&gt;readline(C, [C|Cs]) :- get0(C), readline(_, Cs).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;宣言的に近づいた気もするが、明らかに get0/1 の記述が余計である。しかし入力がヘッドではなくボディにあるのでこれを前に持ってくる必要がある。部屋が無限にあるホテルが満席のとき、新たな客をどう迎え入れるか？の逆をやって解決してみよう。&lt;br /&gt;&lt;pre&gt;No.1 -&gt; No.2, No.2 -&gt; No.3, .., No.Inf -&gt; No.Inf+1&lt;/pre&gt;&lt;br /&gt;の逆なので最後尾から順に手前に移動する。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;readline(C, []) :- terminal(C).                      % もう入力は不要&lt;br /&gt;readline(C1, [C1|Cs]) :- get0(C2), readline(C2, Cs). % 次の入力の備え&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;今度は頭の入力が余るので、呼び出し元 readline/1 に与えてやる。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;readline(Cs) :- get0(C), readline(C, Cs).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;後は終端判定部がループの終了条件とするために!（カット）を仕込んで終わりである。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;readline(Cs) :- get0(C), readline(C, Cs).&lt;br /&gt;readline(C, []) :- terminal(C), !.&lt;br /&gt;readline(C1, [C1|Cs]) :- get0(C2), readline(C2, Cs).&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-2433706695781490907?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=2433706695781490907' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2433706695781490907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2433706695781490907'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_3162.html' title='再帰論理、ふたたび'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-7679191997615801900</id><published>2008-06-09T11:43:00.002+09:00</published><updated>2008-06-09T11:50:53.871+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='ideology'/><title type='text'>殺されうるという自然法</title><content type='html'>&lt;a hre="http://www.sponichi.co.jp/society/flash/KFullFlash20080608098.html"&gt;秋葉原殺傷事件&lt;/a&gt;&lt;br /&gt;「ブラウン管の向こうの争いは何だか絵空事のように見えてしまう、ここが戦場の後方でしかないというのに」と言ったのはどこの隊長だったか。寝坊をしていなければ、自分もあの時その場所に居たかと思うと、もはや他人事ではなく、鼻先につきつけられた恐怖である。しかしそうであったとしても、私は自衛のために何かを持とうなどとは思はないし、警察や自治組織による先行的な取締も望みはしないのだ。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://news.bbc.co.uk/2/hi/south_asia/7442772.stm"&gt;Afghan reporter is shot dead&lt;/a&gt;&lt;br /&gt;BBCのアフガン取材員の撃たれた遺体が発見された。&lt;br /&gt;&lt;a href="http://news.bbc.co.uk/2/hi/africa/7443053.stm"&gt;'Twelve die' in Algerian blasts&lt;/a&gt;&lt;br /&gt;アルジェリアでの駅爆破事件では12名が亡くなった。&lt;br /&gt;(日常であるが故に)大きく取り上げられていないだろうが、アメリカでは昨日も多数の銃犯罪が起っただろう。この週末は洪水や作業現場の事故で亡くなった人も少なくはない。だが、それより圧倒的な数の死が、人間によってもたらされているのが事実なのだ。殺人は世界中で、日々刻々と続けられているのである。&lt;br /&gt;&lt;br /&gt;思い出して欲しい、2001年9月11日の悲劇は、まさに悲劇であって、決して何かのミスや事故では無かった。どれほどに屈強な警備を敷き、二重三重の仕掛けがあっても、私たちは鉄格子の向こうで暮らしているわけではないし、世界有数の経済大国であっても、稼ぎなくして生きる事はままならないのであって、自由の下に時に文化人として、時に経済人として、時に工作人として、行動する。起こりうることは起こりうるのであり、ましてそこに明確な意図が存在して、そしてその意図にとって悲劇が手段であり目的であったならば、その意図を叩く以外に何をもってこれを防ぐことが出来るのか。&lt;br /&gt;&lt;br /&gt;だが、と立ち止まらなければならない。一体何者が、そして如何なる理屈が、未然に狂気を取り締まるというのか。それはまるで一種の暴力である。もし斯様に暴力が、つまり狂気を正すべく行使される思想的・物理的な力が、正義である狂気あらざる意思、の上にに欠かすことが出来ないと云うのなら、畢竟、如何なる正義も暴力の前に憚るのである。考えてみてほしい、狂気は一人の正義に過ぎないし、此れを辞して彼等を保つとは、命を数で見るということに他ならない。&lt;br /&gt;&lt;blockquote&gt;Post hoc ergo propter hoc.&lt;br /&gt;(これの後、従ってこれ故に)&lt;/blockquote&gt;&lt;br /&gt;この間違った論理は、被害感情を伴うことで幾らでも増長してしまう。時系列で見れば何でも「これの後にあれが続く」のであって、「これで無ければあれでは無い」という事とは全く別である。しかしだからと言って、万事塞翁が馬としてあるがままにしておく事も適うまい。自由はおそらく高くつく。おそらく不自由であるよりずっと危険である。だがしかし、私は自衛の手段だとして武装することも、また危険な思想だとして意見を退けることもしたくはないのである。リンカーンが言ったように、たとえこちらに非が無く全く正しいのだとしても、被害が出るのであればこれを避けるのが善いのだと思う。&lt;br /&gt;&lt;br /&gt;それでもなお生まれる悲劇を前に、まさにその悲劇を悪だとする以外の救いがあろうか。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-7679191997615801900?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=7679191997615801900' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/7679191997615801900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/7679191997615801900'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_09.html' title='殺されうるという自然法'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-6959655531263147369</id><published>2008-06-05T23:20:00.004+09:00</published><updated>2008-06-06T00:36:25.555+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='art'/><title type='text'>私は裸であるか？</title><content type='html'>&lt;a href="http://www.amazon.co.jp/dp/4309407633/"&gt;血と薔薇コレクションI&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.amazon.co.jp/dp/4309407692/"&gt;血と薔薇コレクションII&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.amazon.co.jp/dp/4309407730/"&gt;血と薔薇コレクションIII&lt;/a&gt;&lt;br /&gt;澁澤龍彦が編集をつとめ、三島由紀夫、埴谷雄高らを筆頭に錚々たる顔触れが執筆した雑誌「血と薔薇」の冒頭は次にようにある。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;本誌「血と薔薇」は、文学にまれ美術にまれ科学にまれ、人間活動としてのエロティシズムの領域に関する一切の事象を偏見なしに正面から取り上げることを目的とした雑誌である。したがって、ここではモラルの見地を一切顧慮せず、アモラルの立場をつらぬくことをもって、この雑誌の基本的な性格とする。&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;またこうもある。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;本来、エロスの運動は恣意的かつ遍在的であるから、エロティシズムは何ら体系や思想を志すものではないが、階級的・人種的その他、あらゆる分化的対立を同一平面上に解体、均等化するものは、エロティシズムに他ならないと私たちは考える。&lt;br /&gt;性を前にした笑いの本質を、私たちはジョルジュ・バタイユ氏にならって、恐怖のあらわれであると規定する。&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;このような宣言の上で投稿されるエッセイをして、これを悪書、それもとびっきりの悪書と云わずして何と云おうか。そしてこの悪書に心を奪われ、蝕まれ、呑み込まれて行くほどに、その逆側の存在と因果に身を委ねる事になるのである。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;悪魔を信じぬ者は神をも信じぬ者である！&lt;br /&gt;- Peter Cushing, ``Twins of Evil''&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.co.jp/dp/4042400019/"&gt;MADAME EDWARDA&lt;/a&gt;&lt;br /&gt;エロティシズムにメスを入れ、見事なまでの理論へと昇華していった思想家がジョルジュ・バタイユである。バタイユの卓越した論理と表現が結実した小品「マダム・エドワルダ」の冒頭、&lt;q&gt;きみは心得ておるか、人間はどれほどまでに&amp;lt;&amp;lt;きみそのもの&amp;gt;&amp;gt;であるか？愚かで？そして裸であるか？&lt;/q&gt;とある。そこに私は戦慄を禁じえない程の衝撃を受けるのだ。如何なる自由でもって私は私そのものであるなどと云えるのか、と。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.co.jp/dp/4480086978/"&gt;THEORIE DE LA RELIGION&lt;/a&gt;&lt;br /&gt;バタイユの思想はその基礎を、少なからずモースの贈与論によっていると感じる。死後出版された「宗教の理論」は、贈与の原理を基点にして動物性、風習、信仰、観念、道徳、社会、法律、宗教、戦争、経済の形成と連鎖を追尾する。そしてまさに、その工程で想起される"思考の領域を蕩尽していく"ことで、贈与の原理の内に人間が持つ根源的核心、彼流に云えば不連続点を越えた連続性へと迫るのである。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;エロティシズムは死に至るまでの生命の肯定であります。（中略）肉体および心情のエロティシズムを越えたところにある、どちらかといえば後者に近い&amp;lt;&amp;lt;精神的&amp;gt;&amp;gt;エロティシズムは、もはやお互い同士の出会いに依存しない、個々の死がわれわれのなかで消滅させない連続性への通路を捜し求めます。（中略）エロティシズムのみが、われわれを存在の連続性の前にくりひろげ、それだけがわれわれの前に存在の盲目的戯れをくりひろげるのです。&lt;br /&gt;- 講演, ``エロティシズムと死の誘惑''&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;果たして彼が存命中に公開に踏み切らなかったノートは、エロティシズム以外の方法で不連続点の跳躍を可能としたのだろうか。あるいは死の誘惑の彼方に、「神」という無限の連続性を感じたのだろうか。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.co.jp/dp/4320017307/"&gt;幾何的散乱理論&lt;/a&gt;&lt;br /&gt;散乱理論は波動関数、の汎函数、が障害によってどのような散乱を起こすかを説明する理論である。そして現在取り組まれている数理的な視点の一つは、この障害である不連続条件を無限遠点と考え、その近傍での汎函数の展開を調べる、というものである。バタイユが夢想した人間性の根源、自由の所在は、またも物理学と邂逅するのではないか。そう思わずには居られないのである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-6959655531263147369?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=6959655531263147369' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6959655531263147369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6959655531263147369'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_05.html' title='私は裸であるか？'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-7008820155901422370</id><published>2008-06-04T12:46:00.004+09:00</published><updated>2008-06-04T13:56:52.650+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='economy'/><title type='text'>RACEHAZARD5</title><content type='html'>&lt;a href="http://www.msnbc.msn.com/id/24918153/"&gt;South Africa immigrants move into camps&lt;/a&gt;&lt;br /&gt;南アフリカの主要工業はレアメタルを始めとする採掘業だが、作業に当っている大多数は渡りの労働者である外国人だ。アパルトヘイト政策が継続していた頃は国内の黒人労働者が、それこそ奴隷の如く消費されていた採掘行だが、その後マンデラ元大統領の運動を通して差別主義は徐々に弱まり、近年は外国からの移民がその担い手となっている。&lt;br /&gt;&lt;br /&gt;しかし1994年のアパルトヘイト廃止から14年が経過した現在、かつて（実態は一部であったとしても）支配側にあった白人は諸外国へ逃げ、あるいは残された白人は逆に過激な団体の攻撃に晒されている。また廃止後の教育が行き渡っている層を除いてしまえば、中年以上の大多数は差別被害によってうまれた格差構造の中で生きていることになる。外国人労働者への暴力が頻発する状況はこのような過去の遺産の上にあると言えるかもしれない。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://news.bbc.co.uk/2/hi/business/7422300.stm"&gt;S African growth at six-year low&lt;/a&gt;&lt;br /&gt;直近の南アフリカ経済は労働者の待遇を反映したものだ。採掘行の売上高は22.1%も後退し、これは過去40年間で最低である。そして南アフリカの経済はアフリカ経済の大部分を占めている事実がある。同時に世界的な商品高騰は、資源売上げが好調とは言い難い現時点において、国内の流通を苦しめこそすれ助けることは無いのが実情だ。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.petersmap.com/"&gt;Peters World Map&lt;/a&gt;&lt;br /&gt;ピーターズ世界地図はメルカトル図法と異なり面積と位置が正しく描かれた地図である。アフリカという大地が五大大陸の一つであったことを私たちは思い起こすだろうか、あるいはそれ以上の大きさを感じるだろうか。そしてこの領域に人がどのように分布し、経済発展を目指しているのかに思い馳せるだろうか。電力・通信のインフラが敷設され、付加価値の高い活動を行えるためにどのようなアプローチが有効であるのか、考えが及ぶだろうか。私には人がどこかに集まる方がよほど簡単に思えるのだが。&lt;br /&gt;&lt;br /&gt;ちなみに、現地の&lt;a href="http://www.watch.impress.co.jp/game/docs/20080603/bh5m01.htm"&gt;最新映像はこちら&lt;/a&gt;、まぁ信憑性について考えちゃあいけないよ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-7008820155901422370?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=7008820155901422370' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/7008820155901422370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/7008820155901422370'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/racehazard5.html' title='RACEHAZARD5'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-5739607335553200403</id><published>2008-06-03T13:38:00.003+09:00</published><updated>2008-06-03T13:46:30.829+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>愛・おぼえてますか</title><content type='html'>愛というのはIのことであり、つまりI(nput)の事だというのは周知の通りだが、かつてSFアニメの副題ともなったこの台詞は果たして、コンピュータと対峙する者への教訓でもあるわけだ。&lt;br /&gt;「Input・おぼえてますか」&lt;br /&gt;&lt;br /&gt;コンピュータとは入力と出力の間で情報を加工する装置であると言われるほど、I/Oは計算に欠く事が出来ない要素である。では如何にしてI/Oは実現されるのか。簡単に言ってしまうと、何か物理量の変化を介して之を適当な電気信号へと変換し、この信号が所与の装置から装置へと伝達する工程で適切な抽象度を持った情報となり、そしていつかは物理的な変化量として霧散するのである。例えば赤外線が遮断された回数であったり、受光素子に突入する電磁波だったり、あるいは感圧素子が齎す抵抗値の変化であったり、高密度に配置された磁場だったりが、まずはその装置に最も低レベルの信号として入力される。&lt;br /&gt;&lt;br /&gt;装置はその責任の範囲で信号を補足して、またその装置が接続される別の装置に対し、別の装置が責任を持つ範囲で入力を伝達する義務(protocol)を有し、という連環が続く。このような入力あるいは出力の相互的な連鎖をI/Oと呼ぶわけだが、コンピュータ同様に抽象的な立場からこれを観察することになれば、すなわちMonadとComonadの分配則がこれを表現している。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://citeseer.ist.psu.edu/212477.html"&gt;Distributivity for a Monad and a Comonad&lt;/a&gt;&lt;br /&gt;詳細は省くとして、ざっくりとI/Oについて言えばこういうことである。入力や出力は先の通り変化を伴なった装置間の一連の状況を言っている。そこでこれをシステマティックに観察するために、ある時点での変化量xと装置TのセットをMonad Txとしよう。Aに接続された装置Dとその装置における抽象度に対応した変化量yのセットをComonad Dyとする。上に述べたように入出力の相互的な連鎖をI/Oと呼ぶのであれば、その状況で補足されている変化の対応f:x -&gt; yについて、以下の写像~の成立が期待される。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;~:(x -&gt; y) -&gt; (Tx -&gt; Dy)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;そこでMonadとComonadの自然変換λ:TD -&gt; DTを用意しよう。この時、先の写像~でもって変化量の対応がf~となるには次の事を満たせば善いのである。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;δ:T -&gt; T T&lt;br /&gt;μ:D D -&gt; D&lt;br /&gt;μ(Dg~)λ(Tf~)δ = Tx&lt;br /&gt;              = Tx Tx  ; (1)&lt;br /&gt;              = Tx Dy&lt;br /&gt;              = Dx Ty&lt;br /&gt;              = Dx Dz  ; (2)&lt;br /&gt;              = Dz&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;更に一歩進んでこのI/Oの実装に踏み込もう。それは畢竟、上述の条件の表示(1)と(2)に対する意味論を考えることに他ならない。何を隠そう(1)こそが「Input・おぼえてますか」なのである。さしあたって(2)は「Output・おしえましょうか」だろう。蛇足ではあるが、次のPrologコードが理解の一助になれば幸いである。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% read_in/1はファイル入力をパースしてシンボル列を切り出す&lt;br /&gt;% パースの際にはバックトラックが生じる(ここでは省かれている)&lt;br /&gt;% しかし副作用を伴なうget0/1でバックトラックは起せない&lt;br /&gt;% そのため補足した変化量は複製され別の述語に託される&lt;br /&gt;read_in([W|Ws]) :- get0(C), read_word(C, W, Cs), read_rest(Cs, Ws).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;あるいは、UNIXパイプが如何にして独立したプロセスのI/Oを取り持っているかに思いを馳せて欲しい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-5739607335553200403?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=5739607335553200403' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5739607335553200403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5739607335553200403'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post_03.html' title='愛・おぼえてますか'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-5040924568695668901</id><published>2008-06-02T11:33:00.003+09:00</published><updated>2008-06-02T11:45:07.844+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>失敗駆動と再帰論理</title><content type='html'>論理だ、単一化だ、と言ってもループが書きたいときは書きたいのである。Prologの初歩的なイディオムとして、バックトラックを反復に利用する失敗駆動ループがある。例えばユーザにyes/noを選ばせたい場合などは、&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;yes_no :-&lt;br /&gt;    repeat,                            % STEP1&lt;br /&gt;    write('[yes/no] ?- '),             % STEP2&lt;br /&gt;    read(X),                           % STEP3&lt;br /&gt;    (X = yes -&gt; !; X = no -&gt; !, fail). % STEP4&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;入力がyesかnoで無ければSTEP4で単一化に失敗する。read/1もwrite/1もContinuationスタックには何も積まないため、repeat/0まで戻るが、この述語はこんな形をしている。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;repeat.           % PRED1&lt;br /&gt;repeat :- repeat. % PRED2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;repeat/0はPRED2がPRED1を発火するためにいつでも成功する。斯くしてSTEP1は成功し、再びSTEP2で入力を求める。そして一度STEP4が成功すると、以降repeat/0が発火しないように枝を切り、yesなら成功、noなら失敗、となってyes_no/0は終了する。&lt;br /&gt;&lt;br /&gt;失敗駆動ループはこのように(一瞥して分かる)小さな論理においてであれば便利に使える。しかしrepeat/0から失敗する部分までの論理が膨らんでくるとそうは行かない。プログラマの見落しが増大し、予期せぬ実行パスを生んでしまうからだ。そういったときは別のループイディオムがある。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;yes_no :-&lt;br /&gt;    write('[yes/no] ?- '),&lt;br /&gt;    read(X),&lt;br /&gt;    (X = yes -&gt; !; (X = no -&gt; !, fail; !, yes_no)).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;この場合はrepeat/0が無い。失敗時には枝を切ってyes_no/0を再帰呼出する。開発過程で論理が膨らんで想定外の値が生まれると、即時に失敗してくれる。&lt;br /&gt;&lt;br /&gt;このループイディオムには、実は論理型の本質が潜んでいる。後者のループを再帰論理と呼ぶことにしよう。図らずも今回の再帰論理は末尾再帰となっており、これが手続き型のforループと等価であることは明かであろう。当然、末尾再帰でない再帰論理もある。さて、論理型言語というかPrologは計算コストの見積りが簡単ではない。というのは、Prologがバックトラックを起すためである。&lt;br /&gt;&lt;br /&gt;例えばaaaがbbbに依存し、bbbの候補が複数あり、bbbがcccに依存しているとする。aaaが呼出された時点では何れのbbbが成功するのか分からないため、まず何かのbbbを選択し、cccが呼出され、失敗すれば戻って別のbbbを選択する。このような仕組みがバックトラックによって実現されているわけだが、計算コストは一般的に空間か時間に依存した状態マシンの特性を指すので、経過したはずの状態を"無かった"ことにするような仕組みは相性が悪いのである。&lt;br /&gt;&lt;br /&gt;しかし再帰論理の場合これは相当に改善される。次の例を見てほしい。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;yes_no(X) :-&lt;br /&gt;    write('[yes/no] ?- '),&lt;br /&gt;    read(Y), !,&lt;br /&gt;    ((Y = yes; Y = no) -&gt; X = Y;&lt;br /&gt;     yes_no(X)).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;read(Y)を実行した次の述語が何になるかという部分に可能性の幅が存在する。再帰論理ではその候補の深さがここのみに依存するので、計算コストの伸びは限定的である。勿論ここで別の論理を呼出たとしても、またその論理にも同様の制限を設けることで、プログラム全体の計算コストはノイマン型に沿った定義となるのである。&lt;br /&gt;&lt;br /&gt;論理型言語では、一見単純だと思われるイディオムの中に、思いも寄らない深い問題が眠っている事が多い。ということは翻ってみれば罠が一杯あるということでもあるし、未開拓の土地とも言うことが出来るであろう。そして敢えて触れなかった!（カット）について。これはバックトラックの無い世界では別の意味を持ち始めるのだが、それはまた別のはなし。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-5040924568695668901?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=5040924568695668901' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5040924568695668901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5040924568695668901'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/06/blog-post.html' title='失敗駆動と再帰論理'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-2076604051260265716</id><published>2008-05-29T12:34:00.007+09:00</published><updated>2008-06-11T16:40:38.653+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>リストで書き直すのこと</title><content type='html'>変更部分だけ。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% monstres/1&lt;br /&gt;monstres(['焼きたてパン', '強いシャチホコ', 'もんじゃ焼き一年生',&lt;br /&gt;   '怪人ホタテ男', 'ニセ勇者', '逃げ足の早いアレ', '睡魔', '煩悩',&lt;br /&gt;   '愛らしい子犬の中の人', '恋するスズメバチ', '勇敢なクマンバチ',&lt;br /&gt;   '信じられない物','勇者の師匠', '浮遊する鎧', '怪盗ドボン',&lt;br /&gt;   '闇の招き猫', '誘惑のカスタードクリーム', 'しょっぱすぎる籠手',&lt;br /&gt;   'カレー味の兜', '光沢だけは一流の盾', '若葉マークのモンスター',&lt;br /&gt;   '新緑の季節', '梅雨時の車両のニオイ', '暑すぎる夏', '新宿らしき何か',&lt;br /&gt;   'やたら発達したドーナツ', '育ちすぎたクマー', 'なごやかな雰囲気',&lt;br /&gt;   '凍り付いた気配', '忍び寄る恐怖']).&lt;br /&gt;&lt;br /&gt;% competences/1&lt;br /&gt;competences(['お豆腐の買い方', '鉛筆の買い方', '消しゴムの使い方',&lt;br /&gt;      'メモの取り方', '攻撃に使えないこともない呪文', '裏道の歩き方',&lt;br /&gt;      '森林浴', '珈琲の味', 'しじみのみそ汁の作り方', '回覧板の回し方',&lt;br /&gt;      '郵便物の投函方法', '立ち話のコツ', '猫の呼び方', '犬の呼び方',&lt;br /&gt;      'カラスの呼び方', '鳩専用豆鉄砲', '秘密の趣味', '速く走るコツ',&lt;br /&gt;      '剣の使い方', '斧の使い方', 'まきわりで、まっきわりわり',&lt;br /&gt;      '聖なる祈り', '孤独', '涼しく過ごすコツ', 'お洒落のコツ',&lt;br /&gt;      '卵をふわっと焼く方法', 'ごはんの研ぎ方', '油汚れの対応方法',&lt;br /&gt;      '大人の振るまい', 'Suicaの使い方']).&lt;br /&gt;&lt;br /&gt;% nth/3&lt;br /&gt;nth([X|_], 0, X).&lt;br /&gt;nth([_|Xs], N, X) :-&lt;br /&gt;      N &gt; 0, N1 is N - 1,&lt;br /&gt;      nth(Xs, N1, X).&lt;br /&gt;&lt;br /&gt;% aventure/0&lt;br /&gt;aventure :-&lt;br /&gt;      monstres(Monstres), length(Monstres, Lm),&lt;br /&gt;      competences(Competences), length(Competences, Lc),&lt;br /&gt;      repeat,&lt;br /&gt;      niveau(Niveau),&lt;br /&gt;      (niveau_limite(Niveau) -&gt; !;&lt;br /&gt;       I1 is random(Lm) + 1, nth(Monstres, I1, Monstre),&lt;br /&gt;       I2 is random(Lc) + 1, nth(Competences, I2, Competence),&lt;br /&gt;       factoriel(Niveau, Experience),&lt;br /&gt;       que_vous_avez_eprouve(Monstre, Experience),&lt;br /&gt;       qui_votre_niveau_haut(Niveau, Competence),&lt;br /&gt;       nl, sens_omission, nl, sleep(2), fail),&lt;br /&gt;      que_vous_avez_dernier.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;リスト表記でデータを持った方が簡単にはなるが、これでは論理的という感じがあまりしない。これではモンスターごとに新しくを機能を振るとなったとき、例えばこんな感じで拡張する必要が出てくる。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% monstres([(name/hp/str)])&lt;br /&gt;monstres([('焼きたてパン'/100/7), ('強いシャチホコ'/350/15), ...]).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;そうしないとリストを走査する際のロジックが書き難いからだ。ところがもしこれが分かれていれば、&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;monstre('焼きたてパン', 100/7/Skill) :-&lt;br /&gt;      heal(Skill).&lt;br /&gt;monstre('強いシャチホコ', 350/15/Skill) :-&lt;br /&gt;      jump(Skill);&lt;br /&gt;      attack(Skill);&lt;br /&gt;      run_away(Skill).&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;という具合に、実行パスの分節点として機能させる事が出来る。このように個々のデータさえ、実行（あるいは評価）可能なプログラムの断片になっているのが論理型言語の良さなのだから、前の方がPrologらしいに決まっているのだ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-2076604051260265716?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=2076604051260265716' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2076604051260265716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2076604051260265716'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/05/blog-post_29.html' title='リストで書き直すのこと'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-5369511263562642171</id><published>2008-05-29T12:02:00.005+09:00</published><updated>2008-06-11T16:40:07.829+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>「憂鬱な勇者」を Prolog で</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/hrkt0115311/20080527/1211891558"&gt;「憂鬱な勇者」を作った件&lt;/a&gt;&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/scinfaxi/20080527/1211919944"&gt;「憂鬱な勇者」がとても面白かったので、 Scheme に移植してみた&lt;/a&gt;&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/sumim/20080528/p1"&gt;「憂鬱な勇者」を Squeak Smalltalk で&lt;/a&gt;&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/NyaRuRu/20080528/p2"&gt;「憂鬱な勇者」を C# で&lt;/a&gt;&lt;br /&gt;という一連の勇者の冒険に心ときめいたDQ世代の私も便乗してみた。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;:- encoding(utf8).&lt;br /&gt;&lt;br /&gt;% monstre/1&lt;br /&gt;monstre('焼きたてパン').&lt;br /&gt;monstre('強いシャチホコ').&lt;br /&gt;monstre('もんじゃ焼き一年生').&lt;br /&gt;monstre('怪人ホタテ男').&lt;br /&gt;monstre('ニセ勇者').&lt;br /&gt;monstre('逃げ足の早いアレ').&lt;br /&gt;monstre('睡魔').&lt;br /&gt;monstre('煩悩').&lt;br /&gt;monstre('愛らしい子犬の中の人').&lt;br /&gt;monstre('恋するスズメバチ').&lt;br /&gt;monstre('勇敢なクマンバチ').&lt;br /&gt;monstre('信じられない物').&lt;br /&gt;monstre('勇者の師匠').&lt;br /&gt;monstre('浮遊する鎧').&lt;br /&gt;monstre('怪盗ドボン').&lt;br /&gt;monstre('闇の招き猫').&lt;br /&gt;monstre('誘惑のカスタードクリーム').&lt;br /&gt;monstre('しょっぱすぎる籠手').&lt;br /&gt;monstre('カレー味の兜').&lt;br /&gt;monstre('光沢だけは一流の盾').&lt;br /&gt;monstre('若葉マークのモンスター').&lt;br /&gt;monstre('新緑の季節').&lt;br /&gt;monstre('梅雨時の車両のニオイ').&lt;br /&gt;monstre('暑すぎる夏').&lt;br /&gt;monstre('新宿らしき何か').&lt;br /&gt;monstre('やたら発達したドーナツ').&lt;br /&gt;monstre('育ちすぎたクマー').&lt;br /&gt;monstre('なごやかな雰囲気').&lt;br /&gt;monstre('凍り付いた気配').&lt;br /&gt;monstre('忍び寄る恐怖').&lt;br /&gt;&lt;br /&gt;% competence/1&lt;br /&gt;competence('お豆腐の買い方').&lt;br /&gt;competence('鉛筆の買い方').&lt;br /&gt;competence('消しゴムの使い方').&lt;br /&gt;competence('メモの取り方').&lt;br /&gt;competence('攻撃に使えないこともない呪文').&lt;br /&gt;competence('裏道の歩き方').&lt;br /&gt;competence('森林浴').&lt;br /&gt;competence('珈琲の味').&lt;br /&gt;competence('しじみのみそ汁の作り方').&lt;br /&gt;competence('回覧板の回し方').&lt;br /&gt;competence('郵便物の投函方法').&lt;br /&gt;competence('立ち話のコツ').&lt;br /&gt;competence('猫の呼び方').&lt;br /&gt;competence('犬の呼び方').&lt;br /&gt;competence('カラスの呼び方').&lt;br /&gt;competence('鳩専用豆鉄砲').&lt;br /&gt;competence('秘密の趣味').&lt;br /&gt;competence('速く走るコツ').&lt;br /&gt;competence('剣の使い方').&lt;br /&gt;competence('斧の使い方').&lt;br /&gt;competence('まきわりで、まっきわりわり').&lt;br /&gt;competence('聖なる祈り').&lt;br /&gt;competence('孤独').&lt;br /&gt;competence('涼しく過ごすコツ').&lt;br /&gt;competence('お洒落のコツ').&lt;br /&gt;competence('卵をふわっと焼く方法').&lt;br /&gt;competence('ごはんの研ぎ方').&lt;br /&gt;competence('油汚れの対応方法').&lt;br /&gt;competence('大人の振るまい').&lt;br /&gt;competence('Suicaの使い方').&lt;br /&gt;&lt;br /&gt;% que_vous_avez_eprouve/2&lt;br /&gt;que_vous_avez_eprouve(Monstre, Experience) :-&lt;br /&gt;    write(Monstre), write('を倒した!'),&lt;br /&gt;    write(Experience), write('の経験値を得た。'), nl.&lt;br /&gt;&lt;br /&gt;% qui_votre_niveau_haut/2&lt;br /&gt;qui_votre_niveau_haut(Niveau, Competence) :-&lt;br /&gt;    write('勇者は'), write(Niveau), write('にレベルが上がった!'),&lt;br /&gt;    write('勇者は'), write(Competence), write('を覚えた。'), nl.&lt;br /&gt;&lt;br /&gt;% que_vous_avez_dernier/0&lt;br /&gt;que_vous_avez_dernier :-&lt;br /&gt;    write('勇者は、また、レベルが上がった!'),&lt;br /&gt;    write('勇者は、ふと空しさを覚えた。'), nl.&lt;br /&gt;&lt;br /&gt;% sens_omission/0&lt;br /&gt;sens_omission :-&lt;br /&gt;    write('そして、かくかくしかじかで、山あり谷ありの冒険が続いたが割愛。'), nl.&lt;br /&gt;&lt;br /&gt;% factoriel/2&lt;br /&gt;factoriel(0, 1).&lt;br /&gt;factoriel(N, A) :-&lt;br /&gt;    N &gt; 0, N1 is N - 1,&lt;br /&gt;    factoriel(N1, A1),&lt;br /&gt;    A is N * A1.&lt;br /&gt;&lt;br /&gt;% niveau_limite/1&lt;br /&gt;niveau_limite(30).&lt;br /&gt;&lt;br /&gt;% niveau/1&lt;br /&gt;niveau(1).&lt;br /&gt;niveau(N) :- niveau(N1), N is N1 + 1.&lt;br /&gt;&lt;br /&gt;% aventure/0&lt;br /&gt;aventure :-&lt;br /&gt;    findall(Nom, monstre(Nom), Monstres), length(Monstres, Lm),&lt;br /&gt;    findall(Nom, competence(Nom), Competences), length(Competences, Lc),&lt;br /&gt;    repeat,&lt;br /&gt;    niveau(Niveau),&lt;br /&gt;    (niveau_limite(Niveau) -&gt; !;&lt;br /&gt;     I1 is random(Lm) + 1, nth_clause(monstre(_), I1, R1), clause(monstre(Monstre), _, R1),&lt;br /&gt;     I2 is random(Lc) + 1, nth_clause(competence(_), I2, R2), clause(competence(Competence), _, R2),&lt;br /&gt;     factoriel(Niveau, Experience),&lt;br /&gt;     que_vous_avez_eprouve(Monstre, Experience),&lt;br /&gt;     qui_votre_niveau_haut(Niveau, Competence),&lt;br /&gt;     nl, sens_omission, nl, sleep(2), fail),&lt;br /&gt;    que_vous_avez_dernier.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ソースはUTF-8で保存して、処理系はSWI-Prolog Version 5.5.xx以降にする必要あり。あえてリストを（一部を除き）使わない実装にしてみたが、まわりくどくなってしまった気がする。さらにrandom/1はISO-Prologですらない。この辺りはPrologの普及度の低さを強く体言しているといえる。&lt;br /&gt;&lt;br /&gt;にしても、こんなことしていたから昼飯喰い逃してしまった。まぁ昼休みは従業員の自由時間なのだから、どう使おうと勝手だろうが。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-5369511263562642171?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=5369511263562642171' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5369511263562642171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/5369511263562642171'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/05/prolog.html' title='「憂鬱な勇者」を Prolog で'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-6761687194497685172</id><published>2008-05-28T12:39:00.002+09:00</published><updated>2008-05-28T12:54:37.759+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='art'/><category scheme='http://www.blogger.com/atom/ns#' term='news'/><title type='text'>失われたゴヤのスケッチ</title><content type='html'>&lt;a href="http://news.bbc.co.uk/2/hi/entertainment/7422074.stm"&gt;'Missing' Goya sketches&lt;/a&gt;&lt;br /&gt;失なわれたゴヤのスケッチがオークションにかけられているとのこと。オークションの主催者によれば、スケッチは枠に入れられたことも、また光に長時間晒されたこともなく、極めて良い状態とのことである。素晴しい、私の財布にもう10億円ほどあれば迷わず買いつけるのだが。&lt;br /&gt;&lt;br /&gt;スケッチは3点あるとのことだが、ウェブで探した限りだと次の二点しか分からない。&lt;br /&gt;&lt;img src="http://www.telegraph.co.uk/telegraph/multimedia/archive/00674/goya-192_674026e.jpg" /&gt;&lt;cite&gt;image by Telegraph&lt;/cite&gt;&lt;br /&gt;&lt;img src="http://newsimg.bbc.co.uk/media/images/44693000/jpg/_44693396_goya_1_pa_226_b.jpg" /&gt;&lt;cite&gt;image by BBC&lt;/cite&gt;&lt;br /&gt;&lt;br /&gt;ところで、枠に入れられたこともない、というのはどの段階なのだろう。スケッチだから画布がそのままの状態で手付かずということだろうか。一般的にキャンバスというと木材でキャンバス枠を組み、画布をピンと貼った状態で打ちつけ、ニカワを塗る。貧乏な学生は、一度打った釘を抜いてまた別の画布を貼ったりするものである（なので手伝う際には釘を抜き易いよう丁寧に打つ事！）。ちなみに、一度塗上がった画布を軽々しく丸めるなどしてはいけない。キャンバスに塗り付けられた顔料は見るも無惨に剥れ落ちてしまうだろう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-6761687194497685172?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=6761687194497685172' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6761687194497685172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6761687194497685172'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/05/blog-post_28.html' title='失われたゴヤのスケッチ'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-2609724431798087783</id><published>2008-05-27T14:59:00.005+09:00</published><updated>2008-05-27T15:11:08.957+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='finance'/><title type='text'>もう一段の間接参照</title><content type='html'>David Wheelerの格言に&lt;q&gt;Any problem in computer science can be solved with another layer of indirection.&lt;/q&gt;というものがある。コンピュータ科学者だけでなくプログラマの本能もこれを肯定するのである。そうだ、ここにもう一段の間接参照を設けよう、と。実アドレスの代わりに仮想アドレスを、レジスタフィールドのリネーミングを、値渡しを参照渡しに、命令シーケンスをルーチンへ、等々。&lt;br /&gt;&lt;br /&gt;一般的に中央銀行は物価の安定を目的としている。FRBのように雇用の最大化を加えるところもあるが、最重要ミッションは発行する通貨の価値を安定させることだろう。さて、通貨価値の安定を実現するにはどういった戦略が取られるのか。民間銀行の貸付金利が足並みを揃えるというルールならば、公定歩合が政策金利となる。もし民間の金利が自由化されていれば、一次市場に流通する無担保コール翌日物金利、つまり短期金利が政策金利として利用される。いずれにしろ短期的な市場金利を調整を通して、中長期的な債券・物価の上昇率をゆるやかに、つまり通貨価値を安定させる。しかし、と一介のプログラマは思うのだ。ここにもう一段の間接参照を設けては駄目なのか、と。&lt;br /&gt;&lt;br /&gt;インフレターゲットは言わば&lt;q&gt;Another Level of Indirection&lt;/q&gt;であろう。政策金利とは別に、物価上昇率の目標を設定する事で、実質の金利を、名目金利から物価上昇率を引いたものとすることが出来る。その用法は例えば、不動産バブルが弾けて個人貯蓄が動かなくなった経済において、インフレターゲットを高く設定する事で実質金利を下げ、投資・消費行動を促進する、と言った具合である。この場合の投資行動については、むしろ税制改革の方が直接的な影響力を持つのでは、なんて思うものの、インフレターゲットに対する各方面の反論はこれを覆すとは思えない。&lt;br /&gt;&lt;br /&gt;それに何より、インフレターゲットは何だかプログラマが使うアイデアに似ている。これを批難する声は、まるでガロア理論を真っ向から否定する人間のようだ。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;方程式の解をとりあえず α β γ としよう&lt;br /&gt;この数を加減乗除して出来る有理数に対して、&lt;br /&gt;有限回の適当な操作が目的の方程式になるだろうか、&lt;br /&gt;と考えることは出来るだろうか&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;すると無教養な者はこう叫ぶ、&lt;q&gt;馬鹿な、その解が分からないから困っているというのにっ!&lt;/q&gt;と。&lt;br /&gt;&lt;br /&gt;ところで不動産神話が崩壊する以前の日本において、どのようにして堅実なサラリーマンを不動産購入に向かわせたのか、という疑問はまた別の話である。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-2609724431798087783?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=2609724431798087783' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2609724431798087783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2609724431798087783'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/05/blog-post_8469.html' title='もう一段の間接参照'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-3089121425514711915</id><published>2008-05-27T11:28:00.002+09:00</published><updated>2008-05-27T11:36:53.088+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='governance'/><title type='text'>アフリカ開発会議</title><content type='html'>&lt;a href="http://www.mofa.go.jp/mofaj/area/ticad/index_tc4.html"&gt;TICAD IV&lt;/a&gt;&lt;br /&gt;1993年より5年ごとに開催されているアフリカ開発会議(TICAD)の第4回が開催される。綺麗なお題目はともかくとして、日本側はアフリカ諸国の民主化支援を通して、国連常任理事国拡大の支持を、アフリカ諸国はODAと外交的なチャンネルの確保を、双方が望んで始まったことは明らかであろう。&lt;br /&gt;&lt;br /&gt;国連常任理事国の改革案については、拡大以外にも幾つかある。が、何れにしてもポイントは隣国が敵対したときのセーフティネットである。その観点からすれば、日本政府にとってのホットスポットは、大韓民国および中華人民共和国との関係にあるのだから、アフリカを外交的な持駒とすることはそれほどメリットがあるとは思えない。だが今や、日本はアフリカという土地に別の可能性を見出すことが出来るだろう。ODAではない、アフリカ経済圏の支援、つまり民間企業進出の支援である。&lt;br /&gt;&lt;br /&gt;一方アフリカも、一過的な経済支援だけではなく、持続的な改善が必要であった。それはつまり、一方的な教育支援ではなく、新たな土壌を開拓することが出来る体力作りである。自分達で問題に取り組み、解決して行ける状況が教育の最終的な段階であり、それこそ、先進各国が教育を重要政策に加える理由である。有史以来、長期的な国の発展を確実にしてきたまともな手段と言えば、教育くらいしか無かったからである。だがしかし、教育水準がその段階に至るためには、人口がより密集した、それでいて安全な地域を確保する必要がある。騎士物語時代のヨーロッパのように、手紙で意見交換をしたり、工房で文明の利器を作って社会が変動する時代では無いのである。&lt;br /&gt;&lt;br /&gt;第1回の開催に際して、細川総理(1993年当時)は演説で次のように述べている。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;我が国は、開発が「人」に始まり、「人」に終わるとの自らの経験を踏まえて、アフリカにおける人造りを積極的に支援して参ります。(中略)&lt;br /&gt;即ち、アフリカ諸国政府の努力、活力あるアフリカ民衆の参加、そしてそれを支える援助国及び国際機関の支援という三本の矢があれば、&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;cite&gt;&lt;br /&gt;&lt;a href="http://www.mofa.go.jp/mofaj/press/enzetsu/05/eos_1005.html"&gt;総理の演説 -TICAD I-&lt;/a&gt;&lt;br /&gt;&lt;/cite&gt;&lt;br /&gt;お定まりの政治的スピーチだと捉えられなくもないが、私はこれが寧ろ最も問題を突いていると思えてならない。アフリカ諸国が抱える根本的な課題は、それが48の諸国に過ぎず、さらに言えばアフリカ全土で上げられる僅かなGDPが、大半は南アフリカ共和国一国のものだという事実だ。人が散け過ぎているのである。ユーロに続きアフリカ諸国がアフリカゾーンとなる日は訪ずれるだろうか。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-3089121425514711915?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=3089121425514711915' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3089121425514711915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3089121425514711915'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/05/blog-post_27.html' title='アフリカ開発会議'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-6062193722193471944</id><published>2008-05-26T12:41:00.003+09:00</published><updated>2008-05-26T12:47:51.460+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><title type='text'>好きな道具を選びなさい</title><content type='html'>&lt;a href="http://www.washingtontimes.com/beta/"&gt;Washington Times Beta&lt;/a&gt;&lt;br /&gt;Washington Timesのサイトがベータプレビューを公開している。見た通りグラフィックスを主体としたコンテンツ作りになっている。トップページのコンテンツが記事の要約ではなく独立したツールようになっているのが特徴だろうか。それにしても、と思うのである。人間の思考は使う道具に強く依存するのだな、と。&lt;br /&gt;&lt;br /&gt;刷新したサイトは須らくFirefoxやSafariに迎合した作りになる、ほとんどの場合。なるほど、いくらか便利な動性をコンテンツに持ち込む事が可能であろう。そして可能性があり続ける限り、人はそれを追及せずには居られない。サイトのインタフェースやそのコンテンツは強く道具に依存することになる。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nytimes.com/2008/05/26/technology/26firefox.html"&gt;The Big Browser&lt;/a&gt;&lt;br /&gt;Firefox3.0のリリースが近づいてきた。インターネットでやり取りされる情報は原理的には自由であるし、この上での活動が形式を伴わない民主主義だとする論調もあながち間違いでも無いだろうと思う。しかしそれならなお更のこと、少数の意見は守られ、多数の意見は全体を動かすことにもなろう。マウス操作の難傾向や、ナヴィゲーションの視覚化が、コンテンツの受け取り手をどれだけ制限するのか。写真や動画によって閲覧者の想像をどのように限定してしまうのか。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://video.google.com/videoplay?docid=5262479012306588324&amp;q=Bjarne+Stroustrup&amp;ei=OTA6SOyaBKTAqwPc7ZHbAw"&gt;C++0x Initialization Lists&lt;/a&gt;&lt;br /&gt;対極的な一例を挙げよう。巨大で複雑だと形容されるC++の言語仕様は、好き嫌いはともかくとして(いやそれがまさに自由なのだが)、Bjarne Stroustrupが設計に強制を持ち込まないとする点を高く評価すべきだ。だって、こんな単純に思える部分でもこれほど自由を許しているのだから。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-6062193722193471944?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=6062193722193471944' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6062193722193471944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/6062193722193471944'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/05/blog-post_26.html' title='好きな道具を選びなさい'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-2939995654038998860</id><published>2008-05-23T12:27:00.004+09:00</published><updated>2008-05-23T13:08:09.724+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='governance'/><title type='text'>ミニマムアクセス米の行方</title><content type='html'>貿易ルールに詳しい者ならご存知の通り、日本は毎年一定量の米を、たとえ不必要であっても、ミニマムアクセス(以下MA)として輸入している。いまなお世界的に加熱している商品価格の高騰、わけても東南アジア諸国での米価格の高騰に対して、日本政府はこのMAから20万トンの提供を呼びかけた。なおこの件に関してシーファー駐日米大使は「歓迎する」とのコメントを寄せた、と日経の記事にはある。&lt;br /&gt;&lt;a href="http://www.nikkei.co.jp/news/keizai/20080523AT3S2201S22052008.html"&gt;日本の米支援、米大使歓迎(日経オンライン)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;さて、今日のNY Timesの記事を見てみよう。&lt;br /&gt;&lt;a href="http://www.nytimes.com/2008/05/23/business/worldbusiness/23rice.html"&gt;U.S. in Difficult Position Over Japan’s Rice Plan(NYT)&lt;/a&gt;&lt;br /&gt;どうやら外交筋とは違い、連邦政府の広報は強い口調で談話を求めているようだ。実際、この米支援が実体経済にどれほど影響するのかは明らかではない一方、対米貿易について議論を呼ぶことは確実だろう。米国が日本に輸出する米はMAの2/3を占めており、日本がこれを再輸出することに関してこれまでも強く規制してきたという事実がある。そして何より、米国が農作物についても大国であり、これらの輸出収益は連邦に取って決して軽く見れるものではないということだ。&lt;br /&gt;&lt;br /&gt;先日から騒がれている通り米国議会では、農家に対し補助金を与えることを含めた新農業法案が下院を通過した。実態を無視し、富裕農家に補助金をばら撒くような行為だとしてブッシュ大統領は拒否権を発動したが、下院はこれを賛成票316で覆した。上院も既に票は押さえているとの見込みである。&lt;br /&gt;&lt;br /&gt;果たして今回の日本政府の発表は、どの辺りに主眼が置かれているのか。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-2939995654038998860?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=2939995654038998860' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2939995654038998860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2939995654038998860'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/05/blog-post_6633.html' title='ミニマムアクセス米の行方'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-3497540271521439788</id><published>2008-05-23T11:30:00.002+09:00</published><updated>2008-05-23T11:34:56.834+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='finance'/><title type='text'>年金運用</title><content type='html'>&lt;a href="http://www.ft.com/cms/s/0/2530fae4-2850-11dd-8f1e-000077b07658.html"&gt;Revamp urged of Japan's public pension&lt;/a&gt;&lt;br /&gt;日本の基礎年金は平成20年現在、160兆円に及ぶ世界最大のファンドである。もし圧倒的な質量を持った惑星がブラックホールとなるのであれば、このファンドもまたその巨体から光を失なおうとしている。それは現在なお継続して逼迫している世界経済と、そして重要性と相反するかのような運用状況の不透明さにある。&lt;br /&gt;&lt;br /&gt;個人事業者などが選択できる年金の2階部分、国民年金基金は次のように運用状況を(簡易ではあるが)説明している。&lt;br /&gt;&lt;a href="http://www.npfa.or.jp/org/pdf/shisan2006.pdf"&gt;資産運用状況(平成18年度) filetype:pdf&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.npfa.or.jp/org/pdf/un01.pdf"&gt;運用受託機関(平成20年4月現在) filetype:pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;企業の従業員などに積立の義務が課せられる厚生年金の管理・運用は、企業年金連合会(旧、厚生年金基金連合会)がこれを行っている。また企業が私的に設立および加入する厚生年金基金(これは3階に当る)は、それぞれの独立法人が管理・発表を行なっている。&lt;br /&gt;&lt;a href="http://www.pfa.or.jp/top/toukei/unyou_data.html"&gt;資産運用実態調査と統計資料&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.pfa.or.jp/top/jigyou/pdf/pfaunyo2006.pdf"&gt;資産運用状況 filetype:pdf&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.pfa.or.jp/top/toukei/pdf/toushi_kankyou_2007.pdf"&gt;平成19年度投資環境の説明 filetype:pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;さて、では日本国国民に積立の義務が課せられ、老後の生活を最低限支える名目で賦課される国民年金ではどうなっているのか。&lt;br /&gt;&lt;a href="http://www.gpif.go.jp/kanri/pdf/kanri03_h19_p03.pdf"&gt;平成19年度第3四半期運用状況 filetype:pdf&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gpif.go.jp/kanri/pdf/kanri03_h18_p04.pdf"&gt;平成18年度概況 filetype:pdf&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gpif.go.jp/kanri/pdf/kanri02iinkai172.pdf"&gt;平成20年度 運用委員会計画(案) filetype:pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Financial Timesに口を差されずとも、国民年金の運用があまりに国債に依存している事に疑問を持つのは当然であろう。そこに如何なる経済的思慮が介在するのか、あるいは金融の知識に乏しいスタッフが決定に関与しているのか。福田総理には時宜に即した判断を望むばかりである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-3497540271521439788?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=3497540271521439788' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3497540271521439788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/3497540271521439788'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/05/blog-post_23.html' title='年金運用'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-469153470113443454</id><published>2008-05-22T12:09:00.003+09:00</published><updated>2008-05-22T12:15:04.967+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><title type='text'>魔女を焼き尽くせるのか</title><content type='html'>アフリカ中部の村Kisiiで11人の老人が魔女(男)の疑いによって火炙りにかけられた。これは昔話ではなく、つい先日ケニアで起った事件である。治安部隊が急行したが、残念ながら彼等の命は救われなかった。当然ながら悲劇の彼等が魔女(男)であったはずなどない。だが村人は、魔女の集会についてわずかな記述が載った本を指し、取材員にこう語るのだった。ここに誰が魔女なのかを示す証拠がある、と。&lt;br /&gt;&lt;br /&gt;普段は平穏な村人が如何にして狂気の群集と化すのかは、古来より社会学が題材としてきた内容である。フランス革命後の社会学者ジョージ・ルフェーブルは"革命的群集"と題する講録の中でこう述べている。&lt;br /&gt;「彼らは、不安から逃げるために、行動へと急ぐのだ&lt;br /&gt;　つまりは、前へと逃げるのである」&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-469153470113443454?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=469153470113443454' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/469153470113443454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/469153470113443454'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/05/blog-post_22.html' title='魔女を焼き尽くせるのか'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028011500207335385.post-2412472547711347933</id><published>2008-05-22T11:57:00.004+09:00</published><updated>2008-05-22T12:01:44.780+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='finance'/><title type='text'>格付けの正しさ</title><content type='html'>&lt;a href="http://www.ft.com/cms/s/0/09a762ee-2699-11dd-9c95-000077b07658,dwp_uuid=5fd271ee-61f6-11dc-bdf6-0000779fd2ac.html"&gt;CPDOs expose ratings flaw at Moody’s&lt;/a&gt;&lt;br /&gt;ムーディーズが利用するCPDOの格付けモデルの計算に誤りがあった。しかし計算がモデル通りに行われたとしても、依然として格付けには問題が残る。単純に問いかけてみよう、AAAの債券は全て同じものなのかと。あるいはもし、もっと細かな無限に細かな格付けを行ったとして、はたしてそれでも格付けに意味はあるのか、と。&lt;br /&gt;&lt;br /&gt;私たち人間は物事を抽象的に考えることで様々な可能性を導くことが出来る。それは言わば想像の梃子である。だが梃子が梃子であるためには力学に従う必要があるように、想像が妄想にならないための条件が必要である。数学者は論理的に抽象化を行い、公理の帰結として何かを表明する。技術者は構成的に仮想化を行い、可能の範囲で機能を再現する。それでは、銀行家はどのような条件に立って二つの信用を同じものとして扱うのか？私たちは問わねばならない。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028011500207335385-2412472547711347933?l=ratiwo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028011500207335385&amp;postID=2412472547711347933' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2412472547711347933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028011500207335385/posts/default/2412472547711347933'/><link rel='alternate' type='text/html' href='http://ratiwo.blogspot.com/2008/05/blog-post.html' title='格付けの正しさ'/><author><name>koshimoto, hiroo</name><uri>http://www.blogger.com/profile/09141449095639790908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
