Gauche > Archives > 2012/05/26

2012/05/26 04:51:46 UTCyamasushi
#
社会人類学の本を読んでいるのですが、親族の表現とかどうすればいいのだろうと思いました。ググってみるとjavaで実装されたシステムがあるようです。"人類学 lisp"でググると"Beating the Averages"がトップになりました。
http://www.hs.sugiyama-u.ac.jp/~alliance/alliance_adj.html
2012/05/26 04:56:28 UTCmetanest
#
「先祖である」とか「従兄弟である」とかを述語で表現する、というのは古典的定番としては Prolog という気もしますが
2012/05/26 05:56:12 UTCshiro
#
私もprologに代表される論理プログラミングを連想しましたが、上のリンクを見るともう少しspecificな話のようですね(系図のインタフェースなど)。単なる知識ベースとしての親子・親族関係ならAllegroGraphでも管理できますね。
2012/05/26 06:22:36 UTCshiro
#
で、ふと思い立ってKanren http://kanren.sourceforge.net/ を試してみようと思った。Gaucheにロードするのはできたんだけど、使い方がわからん…
2012/05/26 06:24:16 UTCyamasushi
#
こちらに人類学でのコンピューター利用の概説があります。Prologを使ったひとはいるようです。 http://study.hs.sugiyama-u.ac.jp/product/2006Oceania_Newsletter.pdf
2012/05/26 06:28:20 UTCyamasushi
#
本文よりも注釈のほうが面白いです。
2012/05/26 06:35:05 UTCyamasushi
#
人類学ではひとつの家系図だけでなく、複数の家系の相互作用を調べるのでデータ構造上の問題を提起するように思いました。
2012/05/26 06:41:55 UTCshiro
#
複数の家系であっても、婚姻とか養子縁組とかの関係を定義しておくだけではないですか?
2012/05/26 06:46:14 UTCshiro
#
データ構造としては単に<X,Y,その関係>の3つ組を寄せ集めるだけの話なので難しいことはないと思うのですが、家系図というコンテキストに沿ってうまく表示する方は色々な制約を満たさないとならないので面白そうですね。
2012/05/26 06:59:22 UTCyamasushi
#
なるほど。ミクロな点はそうです。たとえば日本の「家」を表現するにはどうするか?といったことです。「家」は個々の成員の交替に関わりなく存続していくわけです。
2012/05/26 07:02:24 UTCshiro
#
「家」に相当するコンテナを作ってしまうのは多分うまくなくて、あくまでデータは個人と個人の関係の集積に止めておき、そのデータの集合から人間の集合を抽出する関数として「家」を定義するのがいいんじゃないかな、という気がします。
2012/05/26 07:08:37 UTCyamasushi
#
なるほど。おもしろいのは父親の扱いです。社会的な規制によるところが大きい。母方の兄弟が「父」のような役割をする社会もあったりする。XとYの関係といったときに、どの文脈での関係なのかという問題があります。
2012/05/26 07:21:06 UTCyamasushi
#
XとYの関係をあらわす方法に工夫が必要で、それが確立できれば良いということなので、データ構造の問題ではないということですね。
2012/05/26 07:41:03 UTCshiro
#
3つ組は最低限必要な要素ですが、少し拡張して<X, Y, 関係, 文脈, 成立期間> など多少余分な情報を付け加えることで抽出を楽にするって手はあります。ですが、「家」の概念みたいにクリアに定義できない(文脈とか時代によって変化するとか、イレギュラーが多いとか)は保存される生データとは切り離しておくのが何かと便利、というのは私の経験です。
2012/05/26 09:59:12 UTCshiro
#
ホノルルの交通渋滞は全米最悪: http://www.nydailynews.com/autos/gridlock-paradise-honolulu-named-worst-u-s-city-traffic-article-1.1084552 根本的に道が少ないからなあ。
2012/05/26 11:47:43 UTCnatsutan
#
gosh-noconsole版の件です。
sysytem.c の win_prepare_handles 内で if (from >= 3) をif (from >= 0)にすればwish.exeと通信できます。他への影響が分からないですが、noconsole版の時だけ常にDuplicateHandleを呼ぶようにすればいけると思います。

src/system.c 1770行目
<             if (from >= 3) {
---
>             if (from >= 0) {


gosh.exeの場合は、fromに9,7,4と3以上の数が3つ入ってループし、3回DuplicateHandleしてます。(正しい動作)
gosh-noconsoleの時、fromに、7, 5, 1と3つ目に3未満の数が入っています。3つめは、CrateProcessをするときの、StartInfo si.hStdInputに対応しているので、DuplicateHandleする必要があります。今の実装だとDuplicateHandleしないでCrateProcess呼んでいるので、パイプが正しくつながらないです。
2012/05/26 11:58:41 UTCshiro
#
ああ、なるほど。0,1,2がもともと開いてないから、パイプのfdがそこから割り当てられてるんかな。あれ、でもnoconsoleでも初期化時に0,1,2をNULデバイスに向けてopenしてたと思うけど…
2012/05/26 12:03:05 UTCshiro
#
ちゃんとdup2でfdを陽に割り当てないといかんかったかな。
2012/05/26 13:24:44 UTCshiro
#
んんん、ちゃんと0,1,2をNULに向けてるのに、sys-pipeで(1,2)がfdとして返ってくるのは一体どういうことだ。