「メガトレンド」を追いかけ、「5分後の未来を展望する」ことを理想します。
書評: 7つの言語 7つの世界

7つの言語 7つの世界を読みました。

気になっていた7つの言語読み始めました。

それで Prolog から。

ナニコレプログラミングゲンゴ・・・って思いましたが、

奥が深いし、結構強力。

面白いかも。




Prolog

1972年ごろにフランスのアラン・カルメラウアーとフィリップ・ルーセルによって考案された[1]。

成立の事情から、Prologプログラムは論理式と見做され、その実行は述語論理によって述語が定義された環境に於ける定理証明に擬して解釈されることが多い。利用者は論理プログラミングの枠組みを、取り分け述語論理を学習することで、この枠組みに極めて忠実なこの言語の基礎的な構造のほとんどを理解できる。その言語仕様はこの枠組み以外には考案者たちも含めてそれ以上の拡張をほとんど行っていないため、他のプログラム言語とは異なり、学習しなくてはならない概念や用語もまた、述語論理に於けるものだけでこと足りる。この点はPrologプログラマにとって次々と湧き出てくるコンピュータサイエンスの新概念と無縁な位置を取れるため、極めて有利であるといえるが、同時にプログラミングの流行からは取り残されて孤立しがちである。


勢いは失ったものの、Prolog は各教育機関で主として論理学の教材として利用され続け、今日まで数万人の人が Prolog の講座を受講している。実務的に利用される機会が少ないにも関わらず、その素養を持つ人が大量に存在するという特異な位置にあるプログラム言語となっている。

世界的に知られる自動プログラム作成ツールシステムGeneXusの基礎部分が Prolog で書かれていたことや、IBM 社のワトソン君の言語解析部分を現在も Prolog が担っていることなどが次々と喧伝されて、応用面でも現役言語であることが改めて認識されつつある。

さらにここ数年の世界的な関数型言語への急激な関心の高まりによって、関数型言語と類縁性の高い論理型言語の盟主であり、人気関数型言語 Erlang の原像でもある Prolog への関心は再び強まっている。






The GNU Prolog web site

likes(wallace, cheese).
likes(grommit, cheese).
likes(wendolene, sheep).

friend(X, Y) :- \+(X = Y), likes(X, Z), likes(Y, Z).



をテキストエディタを使って、liketaro.proというファイル名で保存。

Prologを起動しliketaro.proを読み込ませると、yesの文字。

上三行は事実。例えば、一行目はwallaceはチーズが好きという意。

四行目はルール。


Prolog上で以下のように訪ねると、それぞれyes/noで答えてくれる。

likes(wallace, sheep).
no

likes(grommit, cheese).
yes

friend(wallace, wallace).
no




Prolog演習




制約論理プログラミング

制約論理プログラミング(せいやくろんりプログラミング、Constraint logic programming)は制約プログラミングの一種で、制約という問題表現・解決の考え方を導入することによって論理プログラミングを拡張したプログラミングパラダイムである。論理プログラミングの持っている宣言的な表現力に制約の考え方を導入し、より一般化したものとも言うことができる。






制約プログラミング

制約プログラミング(Constraint Programming)は、変数間の関係を制約という形で記述するプログラミングパラダイムの一種である。制約が他の言語のプリミティブと異なるのは、実行すべきステップではなく、解の特性を記述するという点である。制約プログラミングにおける制約は様々である。制約充足問題での制約やシンプレックス法における制約などがある。制約は通常、プログラミング言語に埋め込まれているか別個のライブラリで提供される。

制約プログラミングは制約を論理プログラミングに埋め込んだ制約論理プログラミングが起源である。1987年、Jaffer と Lassez がProlog IIにある種の制約を取り入れたのが最初であった。制約論理プログラミング言語の実装としては、Prolog III、CLP(R)、CHIP がある。今日でも GNU Prolog などの制約論理プログラミングのインタプリタが存在している。

論理プログラミング以外では、制約は関数型言語、項書き換え、命令型言語などと融合させることができる。関数プログラミングでの制約としては、マルチパラダイムプログラミング言語 Oz がある。制約を取り入れた命令型言語としては Kaleidscope がある。しかし、命令型言語での制約はツールキット的な形態でライブラリとして既存の言語向けに提供されている場合がほとんどである。




並行計算

並行計算(へいこうけいさん、Concurrent Computing)とは、複数の相互作用を及ぼす計算タスクの(同時)並行的実行を指す。並行コンピューティングとも呼ぶ。個々のタスクは通常別々のプログラムとして実装されるか、1つのプログラムから複数のプロセスやスレッドを生成する形で実装される。そのようなプログラムを作成することを並行プログラミングと呼ぶ。

タスク群は1つのプロセッサ上で動作する場合、複数プロセッサ上で動作する場合、ネットワークを介した分散システムで動作する場合が考えられる。

並行コンピューティングは並列コンピューティングと近い概念だが、タスク間の相互作用を重視する点が後者とは異なる。並行計算システムの設計における主要な課題は、タスク間の相互作用や通信の順序付けとタスク間で共有するリソースへのアクセスである。並行計算のパイオニアとしては、エドガー・ダイクストラ、Per Brinch Hansen、アントニー・ホーアが挙げられる。




Constraint Handling Rules

Constraint Handling Rules(CHR)は1991年にThom Frühwirthが発表した、ユーザ定義の制約が書けるように設計された宣言型プログラミング言語である[1] [2]。

多重集合の書き換え規則に基づく制約処理モデルを特徴とし、ルールにより制約をより単純な制約に書き換えることで、様々な制約下での解を求める。

CHRはチューリング完全だが[3]、 独立した言語としてではなく既存言語の拡張機能として、主にPrologなどのホスト言語上に実装されたライブラリとして提供される。 CHRの典型的な応用分野はアブダクションなどの推論サービス、マルチエージェントシステム、自然言語処理、スケジューリング、型システム、ソフトウェアのテストと診断、セマンティックウェブなどである。



関連記事
スポンサーサイト
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://jderby.blog51.fc2.com/tb.php/3231-5cce58d0
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック