yamicha.com's Blog - Presented by yamicha.com
Blog yamicha.com's Blog - 2017/11 の記事
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30]

yamicha.com's Blog
 諸事情により、現在更新休止中。ご了承ください。もし今後ブログを再開することがあるとすれば、その際にはこのブログスクリプトではなく、新しく開発したものによるかもしれません。
 当ブログ管理者についてはこちらをご参照。
開発魔法(737)
社会問題(733)
お知らせ(11)
質問・バトン回答(15)
ゲスト出演(8)
経済・知的財産(150)
ゲーム開発(182)
[Ada] 勝手に補足
- Note
- 金配りの次の一手


- Endless Ultimate Diary
- 銃世界

漢字バトン
- うるる雑記帳
- 漢字接力棒

ツキアイゲノムバトン
- ブログ@うにうに画像倉庫
- あぶ内閣

縺イ縺セ縺、縺カ縺励ヰ繝医Φ
- 月夜のボヤキ
- 騎士サーラバトン
パスワードを使う
名無し (2012/02/27)


開発者解放裁判
yamicha.com (2010/03/14)
Winnyに関しては、私も「純白」とまでは考えておりませんし、使用し..

開発者解放裁判
通りすがり (2010/03/08)
winnyに関しては「ダウンロードソフト板」なんてところを拠点に開発..

新型インフルエンザの恐怖
いげ太 (2009/11/03)
> C#などの「int Some(int , int)」は、F#では「(int * int) ->..

時効に関する思考
yamicha.com (2009/08/31)
>いげ太さんコメントありがとうございます。手元にドキュメントが少..
Homepage
Blog Top
Normal View
List View
Search
Calendar
Comment List
Trackback List
Blog RSS
Send Trackback
Phone Mode
Administrator
yamicha.com
Blog
るううるる。
Source
法令データ提供システム
FindLaw
Development
Java2 Platform SE 6
Java EE 6 API
MySQL Developer Zone
PHP Reference
MSDN Library
Ada Reference Manual
Objective Caml
Python Documentation
Erlang
Prolog Documents
用済団体連合会
2009/10/18(Sun)19:58:38
 政権が変わったことで、国会や国政に直接関係のない部分でも様々な変化が起こりつつありますが、象徴的なのが経団連の弱体化です。選挙前に政権交代の兆しが見え始めた段階から、経団連の行動はかなり慎重なものへと変貌しつつあり、政権交代後はさらにその傾向が強くなりました。これまで献金の目安として示してきた政策の格付けも、今年は見送りに追い込まれています。
 何はともあれ、経団連が以前より政治から遠ざけられるのは非常に良いことです。勘違いしてはいけない点なのですが、経団連はあくまで「大企業の、大企業による、大企業のための政策を実現させるための組織」に過ぎず、決して正義の味方や憂国の士ではありません。経団連と蜜月の関係にあった自民党と違い、民主党が彼らと距離を置こうとしているのは、民主党の政策理念からしても、おおむね正しい方向性です。
 経団連の代表的な主張として、「消費税を上げて法人税を下げる」などといったものがありますが、私はこれを全くの逆効果と考えているものの、「企業主導の景気回復」を期待したものとも取れますので、これだけで経団連が自分のことしか考えていないと評するのは早計です。しかしながら、談合発覚時に取り立てる金額を欧米並みに引き上げる案が出た際には、経団連が頑強に抵抗し、引き上げ幅を縮小されてしまいました。また、公益通報者保護法も経団連によって骨抜きにされています。三菱や雪印偽装、ミートホープ問題などが公益通報で発覚したことを考えれば、国民の生命すら脅かしかねない行為と断じざるを得ません。無賃残業合法化が検討された際には、当時の政府が「年収900万円」を条件として、一般の人には適用しないとのアピールに腐心する一方、経団連は「年収400万円」をハードルにすることを主張しており、狙いは見えたも同然でした。ここまで徹底していると、さすがに弁護のしようもありません。
 今年は見送りとなった政策評価にしても、その実は2008年分を見れば一目瞭然です。A〜Eの5段階評価で、10項目について「合致度」「取組み」「実績」の3種類の評価がなされているのですが、以下の表は各党・各評価ごとにA〜Eの個数をまとめたものです。

評価 自由民主党 民主党
合致度 取組み 実績 合致度 取組み 実績
A 7 3 0 0 0 -
B 2 6 7 3 2 -
C 1 1 3 6 3 -
D 0 0 0 1 5 -
E 0 0 0 0 0 -

 産経新聞の「教科書の通信簿」も真っ青の恣意的評価です。民主党にAはなく、自民党にDはありません。公開は2008/9/17とされていますが、この時期にはすでに自民党は指導力を非常に失っており、同24日には福田氏が辞任してしまいます。この評価を献金の目安にしていたといいますが、どこからどう見ても「自民党に献金しなさい」という布告です。これでは当然、民主党政権下では自粛せざるを得ないでしょう。
 とはいえ、これは驚くべき評価ではありません。経団連は企業の利益のための団体であって、日本を住みよい社会にしようと考えているわけではありませんので、自己利益のために自分の意に沿う政党に献金し、懐柔しようとするのは当然です。先の格付け評価を見ても、評価を「合致度」と銘打ってある辺り、まだ正直であるともいえます。
 ともかく、この意を受けた自民党が派遣を解禁したり、法人税を下げようとしたり、無賃残業合法化を成立直前の段階まで持って行ったりと、様々な政策を行ってきたのは間違いありません。ただ、経団連の思惑と国を安定させる方策が一致しているうちは上手くいくのですが、昨今のように新自由主義経済が破綻寸前となり、世界的に疑問符がついてくると、あくまで自己利益を優先する経団連の主張にはことさら矛盾が目立ってきます。法人税減税の決まり文句「企業が海外に逃げる」はそれを端的に表していて、これはすなわち「時勢を誤った企業優先主義で日本がボロボロになり、利用価値がなくなったとしても、大企業は日本を見捨てて海外に逃げることができる」とも言い換えられます。
 今後の日本で二大政党制が定着するかはまだ分かりませんが、もし日本が定着の傾向に動いていれば、経団連の影響力が低下することはあっても、強化されることはあり得ません。しかも経団連はおそらく多くの国民に見放されており、悪印象を持たれています。かく言う私も、経団連が何らかの「国民・社会・日本に有利な」政策を提言した際には、必ず裏を疑うようになってしまいました。しかも、事実として大抵は何らかの裏があります。
 二大政党制が定着すれば、献金で政権を動かして望みの政策を実現させるというモデルは、もはや時代遅れのものとなる可能性もあります。この「金も出すが口も出す」方針もまた国民に支持されているとは言いがたく、民主党は禁止の方針さえ打ち出しています。さらに、政権交代がいつでも可能となれば、経団連が自分勝手な政策を提言したとしても、各党はそれを実現するのが困難になります。このまま行けば、いずれ「我が物顔」が通用しなくなる日が来るでしょう。
 経団連は企業の団体のはずですが、もはや信用は失うところまで失っています。もはや自己利益だけを考え、政党にすり寄っていても相手にされなくなる時代となりつつありますが、果たして時勢を読み、信用を回復することはできるのでしょうか。
 ところで、亀井氏が経団連会長の御手洗氏に「家族間の殺人事件が増えたのは、大企業が日本型経営を捨てて人間を人間として扱わなくなったから」であると発言していたことが以前に取り上げられましたが、これについても少し取り上げておきましょう。
 残念ながら断定するほどの資料は見つけられませんでしたが、亀井氏の発言はおそらくデマです。家族間の殺人がどうかは不明ですが、少なくとも殺人事件全体に関しては、戦後から1990年付近までほとんどの時期において減少を続けており、特に1985年から90年にかけては大幅に減少し、その後はほぼ一定して低い水準が続いています。すなわち、現在の水準に落ち着いた1990年付近以前には、少なくとも今より多くの殺人が起きていたことになり、もし家族間殺人の割合が今と昔でさほど変わっていないのであれば、下手すると人口比で今の4倍も家族間の殺し合いが起きていた時代があったといえます。また、昔より今の方が家族間殺人の割合が多いとしても、「殺人の件数が減ったのは、もっぱら公共性の高い殺人が減ったため」とも考えられます。さらにさかのぼれば、親が子を殺したり売り払うことなど当たり前で、罪にすらならない時代もありました。
 ちなみに、日本にはかつて「尊属殺」という罪があり、無期懲役か死刑という大変重い刑罰となっていましたが、栃木実父殺し事件で違憲判決が出され(一応補足しておくなら、この時の違憲判決は「減刑しても執行猶予にもできないほどの罪は重すぎる」というもので、必ずしも罪自体を違憲とするものではありませんでしたが)、法律自体はいつもながら自民党の意味不明な家族観による抵抗で削除されなかったものの、実際には全く運用されなくなり、しばらく後にはついに正式に削除されました。
 ついでに、私の価値観を述べておくなら、家族間の殺人より公共性の高い殺人の方が重く見られるべきと考えています。つまり、この主張自体が事実の可能性は低いものの、亀井氏が「家族間の殺人が増えている」と憂慮しているのに対し、私はむしろ家族間ではない公共性の高い殺人、すなわち見ず知らずの人をいきなり襲ったり、通り魔で多数を殺傷したりといった事件の方が重大であり、憂慮すべきものと考えています。
 「歯に衣着せぬ」のは結構ですが、根拠もなくデマを唱えられては論全体の信頼性が落ちます。経団連の身勝手さと新自由主義の失敗は多くの人が指摘するところとみられますが、いい加減な発言はこの論全体の信頼性を貶め、「同類の背中を撃つ」結果となります。厳重に謹んでいただきたいものです。

 携帯電話会社の1つに「ソニー・エリクソン」なるものがあります。
 ソニーと関係のある会社であるのは一目瞭然ですが、それでは「エリクソン」とは何か。エリクソン社はスウェーデンの会社で、主に通信機器を手がける世界的な大企業です。そして、ソニー・エリクソンは同社とソニーの合弁会社です。
 このエリクソン社が設計して社内で使用し、後に一般にも公開されたプログラム言語が、Prolog類似の関数型言語「Erlang」(アーラン)です。名前の由来は数学者アグナー・アーランらしいのですが(その他、Ada、Haskell、Pascalなども数学者らの名前を取っている)、どうも「エリクソンの言語」を意識したネーミングでもあるようです。ちなみに「アーラン」は通信量の単位としても使われています。
 以前にひとまず並列処理まで扱ってみたことがありますが、私とProlog系統の文法は相性が悪いらしく(いくら覚えようとしても絶対に覚えられないVBに比べればかなりマシですが)、基本の書き方すら忘れてしまうため、いい加減に覚書をしたためておきます。
 ひとまず、関数型のサンプルとして非常に有名な「階乗」から。大変いい加減ですが、Prologなら以下のようになります。
fact(X , R) :- in_fact(X , 1 , R).
in_fact(X , R , R) :- X =< 1 , !.
in_fact(X , Y , R) :- V is X * Y , I is X - 1 , in_fact(I , V , R).
 これは以下のように呼び出します。
?- fact(0 , R).
R = 1.

?- fact(1 , R).
R = 1.

?- fact(5 , R).
R = 120.

?- fact(10 , R).
R = 3628800.
 これはこれで面白いのですが、使い方が特徴的でとっつきづらく、実用性の点でも問題があります。「Prologがもっと実用的な関数型言語であれば」という夢物語のひとつも語りたくなるところですが、この夢をErlangがかなえてくれました
 以上のプログラムをErlangで書き直すと、以下のようになります。ファイル名はblog.erlとしました。
-module(blog).
-export([fact/1]).

fact(X) -> in_fact(X , 1).
in_fact(0 , R) -> R;
in_fact(X , R) -> in_fact(X - 1 , X * R).
 -exportでは公開する関数名のリストを指定し、ここに書かれていない関数は外部からは呼び出せません。関数の指定方法といい、つくづくPrologそっくりです。Prolog同様、通常はピリオドが区切りとなりますが、上記サンプルでいうところのin_fact/2同士はセミコロンで区切っている点に注意が必要です。
 これをErlangコンソールから呼び出します。binディレクトリのerl.exeもしくはwerl.exeがそれですが、いずれもカレントディレクトリのファイルを探す仕様となっているため、ソースを保存したディレクトリをカレントにした状態でerlやwerlを実行する必要があります。werl.exeへのショートカットを作っておいて、プロパティの「作業フォルダ」を普段使用するディレクトリにしておけば、カレントディレクトリ設定後にwerl.exeを呼び出す作業が自動的に行われるため便利です。
1> c(blog).
{ok,blog}

2> blog:fact(0).
1

3> blog:fact(10).
3628800
 Prologには独特の使いづらさがありますので、Erlangの方が割と何も考えずに書けそうです。用途が違うため一概に比較はできませんが、論理型言語に起因する冗長さや複雑さとも無縁であるため、Prologに比べてかなり効率良く記述できます。また、Lispその他の多くの関数型言語と違い、関数名の後にカッコでくくって引数を指定する形式であるため、手続き型言語に慣れ親しんでいてもそれなりに読みやすいのも特徴です。
 参考までに、OCamlまたはF#では以下のようなコードとなります(あえて型の指定は省略しています)。私が初めて関数型言語を習得しようとした際、何がどのように関数なのかが分からず、非常に戸惑った記憶があります。その際に使用したのがHaskellでしたが、果てはカリー化まで出てきて大混乱しました。関数型未経験者にとってはErlangの方が取っ付きがよさそうです。
let fact x =
	let rec in_fact x r = match x with
	| 0 -> r;
	| _ -> in_fact (x - 1) (x * r) in
	in_fact x 1;;
 関数型言語といえばリスト処理ですが、これもまたPrologに非常に類似しています。まずPrologより。
sum(X , R) :- in_sum(X , 0 , R).
in_sum([X | XS] , S , R) :- NS is X + S , in_sum(XS , NS , R).
in_sum([] , R , R).
 リストの中身をすべて足し合わせるコードです。これをErlangで書くと、
-module(blog).
-export([sum/1]).

sum(X) -> in_sum(X , 0).
in_sum([X | XS] , S) -> in_sum(XS , X + S);
in_sum([] , S) -> S.
 論理型の冗長さを除けば、記述していることはほとんど同じです。
 一方、Erlangは関数型言語だけあって、お得意の高階関数は非常に簡単に書けます。Prologでも書けるには書けますが、若干煩雑です。例によってPrologより。
filter(F , X , R) :- in_filter(F , X , [] , R).
in_filter(F , [X | XS] , R , RR) :- call(F , [X]) , ! ,
	in_filter(F , XS , [X | R] , RR).
in_filter(F , [_ | XS] , R , RR) :- ! , in_filter(F , XS , R , RR).
in_filter(_ , [] , R , RR) :- rev(R , RR).

rev(X , R) :- in_rev(X , [] , R).
in_rev([X | XS] , S , R) :- in_rev(XS , [X | S] , R).
in_rev([] , R , R).

% 条件
over5(X) :- X > 5.
 呼び出した結果は以下の通りです。
?- filter(over5 , [1 , 9 , 2 , 8 , 3 , 7] , R).
R = [9, 8, 7].
 これと同等のコードをErlangで書くなら、
-module(blog).
-export([filter/2]).

filter(F , X) -> in_filter(F , X , []).
in_filter(F , [X | XS] , R) -> E = F(X) , in_filter(F , XS ,
	(if E -> [X | R]; true -> R end));
in_filter(_ , [] , R) -> rev(R).

rev(X) -> in_rev(X , []).
in_rev([X | XS] , R) -> in_rev(XS , [X | R]);
in_rev([] , R) -> R.
 といったところでしょうか。
 ifで直接F(X)を評価するのではなく、一旦Eに代入してから評価しているのは、直接評価するとillegal guard expression呼ばわりされてしまうためです。リファレンスのGuardの項を見てみると、次のように書いてあります。
The set of valid guard expressions (sometimes called guard tests) is a subset of the set of valid Erlang expressions. The reason for restricting the set of valid expressions is that evaluation of a guard expression must be guaranteed to be free of side effects.
 確かに、ifやwhenに何らかの作用があるのは関数型言語としてはまずいのでしょうが、かなり余計なお世話です。一旦変数にしてしまえば、関数の副作用のある部分が複数回実行されることはなくなりますし、Erlangの変数は変更されない(a variable can only be bound once.)わけですから、ifやwhenから副作用を排除できる、という理屈です。そうでない場合、全く同じ条件判定を2つ並べた場合であっても、後者が実行されるような珍妙な事態に陥りかねません。ただ、いずれにしても言語側で規制すべき事柄ではない気がしてなりません。それとも最適化(メモ化など)を行う上で都合が悪いのでしょうか。
 今回書いたfilter/2は高階関数ですから、呼び出す際には関数を渡さなくてはなりませんが、関数型言語のお約束通り、Erlangもラムダをサポートしています。
1> c(blog).
{ok,blog}

2> blog:filter(fun(X) -> X > 5 end , [1 , 9 , 2 , 8 , 3 , 7]).
[9,8,7]
 ラムダの書き方も手続き型に近いので、とっつきやすいのではないでしょうか。
 なかなか面白い言語ですし、エリクソン他で使用されている実績もありますので、普及して欲しい言語の1つです。
カテゴリ [開発魔法][社会問題][経済・知的財産] [トラックバック 0][コメント 0]
<- 前の記事を参照 次の記事を参照 ->

- Blog by yamicha.com -