hotchpotch/wikipedia-multilingual-ir-pairs huggingface dataset:
ラオス 経済
内陸国であり、外洋に面した港を持っていない。メコン川は大型船も航行できる川幅はあるが、ラオス南部にコーンパペンの滝群があるため、外海から遡上できない。こうした物流面でのハンディは、外海に面した港湾を持つ周辺諸国との道路・鉄道整備により克服されつつある。このため、賃金上昇や人手不足に直面しているタイに比べて労働力が豊富で人件費が安い「タイ＋1（プラスワン）」の対象国として、カンボジアやミャンマーともに注目されている。ただ現状では製造業は発展途上で、市場に並ぶ工業製品の大半はタイ製か中国製である。
かつて近代的な設備を備えた大きな工場は、ビールや清涼飲料水などを生産する国営のメーカー「ビア・ラオ」が目立つ程度であった。ラオスの酒といえば米を原料とする焼酎ラオ・ラーオがあるが、生産は家内制手工業レベルにとどまる。伝統的な織物も名高いが、多くは農家の女性たちの副業として手作業により作られている。
1986年のソ連のペレストロイカの影響を受け、ラオスでもチンタナカーン・マイ（新思考）と呼ばれる市場経済導入が図られた。これは、中国の改革開放、ベトナムのドイモイ（刷新）と同様の、社会主義体制の中に資本主義のシステムを取り入れようという試みである。共産主義政権樹立以降ほぼ鎖国状態にあったラオスであったが、チンタナカーン・マイ以降自由化と開放が進み、上記の経済の項目にある通り、政府がラオス観光年を設定しプロモーションを行って観光産業の育成に努力した結果、観光産業が急速に発達した。ルアン・パバンの町とワット・プーなどの2つの世界文化遺産や、ジャール平原、多くの仏教寺院などが年間300万人を超える外国観光客を呼び、外貨獲得の大きな産業となっている。プロモーションのため、日本では2007年9月23日-24日、東京の代々木公園でラオスの魅力を紹介する第1回ラオスフェスティバル2007が開催された。
ラオス 国民
2021年時点での人口は733万人であり、2000年以降は年10万人ペースで右肩上がりに着実に増加している。

人口密度は、1km2辺り24人。ちなみに、ベトナムは256人、タイは132人、中国・雲南省は114人、カンボジアは82人、ミャンマーは74人であり、ラオスは人口が少ないことが分かる。ラオスには、大きい人口を抱える広大な地域がない。たとえばベトナムの紅河デルタ、メコンデルタ、タイのチャオオプタデルタ、ミャンマーのイワラジデルタのような政治・経済の中心地になる地域がない。最大の人口を抱える首都ヴィエンチャンでも人口71万人である。国全体の人口も、隣国ベトナムのハノイやホーチミン一都市を下回る。
一番多いのは人口の半分以上を占めるラオ族（ラーオ族）であり、それに50程度の少数民族が続く。しかし、ラオス政府はラオス国籍を持つ者を一様にラオス人として定義しているため、公式には少数民族は存在しない。
1950年以降は次のように大きく3つに分けられており、それぞれの人口比率は60対25対15である。その区分の有効性は疑わしいが、この区分が国民の間に広まっている。
ラオス 国民
ラオス政府の定義するラオス人は住む地域の高度により、低地ラーオ族（ラーオルム、国民の約7割、ラオス北部の山間盆地）、丘陵地ラーオ族（ラーオトゥン、国民の約2割、山麓部に居住、水田水稲作と焼畑の両者を組み合わせ）、高地ラーオ族（ラーオスーン、国民の約1割、山深くに居住、陸稲・トウモロコシを焼畑で栽培）に分けられる。
低地ラーオ族
川の流域の平野、平地に住む人々、国勢調査（2005年）8民族。タイ族系民族。ラオスの先住民ではない。メコン河沿いのルアンパバーン、サワンナケート、チャムパーサックの平野、シェンクワンやカムムアンの高原などに居住し、人口を増やしていった。水田水稲作、高床住居、天秤棒で運搬、母系制、上座部仏教信仰。
丘陵地ラーオ族
産地の中腹、丘陵地に住む人々、モン族・クメール系民族。ラオスの先住民族。北から南の山の中腹（300 - 800メートル程度）にラオス中に広く居住。特に南部に多い。山の斜面で焼畑、狩りに長じる森の民族。国勢調査（2005年）32民族。最多がクム族の61万人、最少はクリー族が500人未満（1995年統計よりさらに減少）。存亡が危惧される民族も多い。南部の世界遺産プラーサート・ワット・プーその他のクメール遺跡を残す。
ラオス 国民
高地ラーオ族
山の高地、頂上近くに住む人々、フモン族・ミエン（Mien, メオ・ヤオ）系民族、チベット・ビルマ系民族。ラオスで一番新しい住民たちで、18世紀から19世紀にかけて、中国の雲南省や四川省などから移住してきた人々である。中国清朝時代の少数民族に対する圧政に耐えかねて逃れてきた人々も多い。中国、ベトナム、タイ、ミャンマーなどの国境の山岳地帯にまたがって、広がって住んでいる民族である。これらの民族は、焼畑でうるち米やトウモロコシを作って生活している。文字を持っていない。
実際には、フアパン県にカム族、タイデン族、タイダム族、モン族、青モン族、黒モン族、ヤオ族が、ウドムサイ県にはモン族が、 ポンサーリー県にはアカ族とタイダム族が、ルアンナムター県にはランテン族、黒タイ族、タイルー族、タイダム族、アカ族、イゴー族、ヤオ族、モン族が住んでいる。
このような標高による住み分け分布ができたのは、紀元前からモン・クメール系の人々がこの地域に暮らしていたが、9世紀ごろからタイ系の人々が南下してきたことに端を発する。その後、清代末期の19世紀後半からモン・ミエン系やチベット・ビルマ系の人々が中国南部から移住してきた。漢人の支配・干渉を嫌い移住してきたと言われている。
ラオス 国民
各民族語が話されているが、公用語に定められているのはラオス語（ラーオ語）である。ラーオ語とタイ語は同一言語に属する個別の地域変種の関係（平たく言えば、ラーオ語とタイ語はそれぞれが互いに方言関係）にあるが、ラオスではタイからの影響力を遮断するため、ラーオ語の独立性を強調する傾向にある。
英語は、ホテルや旅行者向けのレストランなどではほぼ通じる。また、フランス式教育を受けた者や政府幹部、エリートなどにはフランス語も通用する。
ほとんどの女性が夫の姓に改姓する（夫婦同姓）が、改姓しない女性もいる（夫婦別姓）。また、一夫多妻制が事実上公認されている。ラオスでは憲法と家族法では一夫多妻制の法的承認を禁止しており、一夫一婦制がこの国の主要な結婚形態であると規定している。しかし、一夫多妻制自体は違法とされているものの、一部のモン族の間では一夫多妻制が今でも慣習として残っていることから、罰則は軽いものとなっている。
宗教は上座部仏教が60%、アニミズムやその他の宗教が40%であるが、しばしば仏教とアニミズムが混同されて信仰されていることがある。その他ラオス南部ではキリスト教も信仰されている。
ラオス 国民
19世紀まで続いていたラーンサーン王朝では仏教が国教とされていた。しかし、ラオス人民民主共和国成立後、仏教は特別な保護を受けなくなった。ただし、農村の地域コミュニティーと仏教寺院は密接な関係を保ち続けている。そのため、ラオス人民革命党も「党の理念・思想と一致する」と明言するなど、仏教との関係を意識している。
ラオスの人口の大部分は農村部であることから、衛生への投資が困難となっている。
1990年には、改善された衛生設備を利用できる農村人口が僅か 8% にしか満たなかった。2014年に実施された世界銀行調査のデータによると、ラオスはユニセフとWHOの共同監視プログラムに基づく『水と衛生に関する「ミレニアム開発目標（MDG）」』の目標数値を達成しているが、2018年の時点では、同国人口の内 約190万人が改善された給水を利用できず、240万人が改善された衛生設備を利用できない状態となっている。
ラオス 社会
黄金の三角地帯の一か所である点から、薬物犯罪に絡む問題が根深い面を残している。
ラオス 治安
2023年04月17日時点で外務省は、「近年、首都ビエンチャン等の都市部を中心に、ひったくり、強盗、置き引き、侵入盗等の一般犯罪が多発しています。また、日本人が被害者となる空き巣、昏睡強盗、夜道でのひったくり事案も発生しています。また、2022年5月に、新型コロナウイルス防止対策によるラオスの入国制限が大幅に緩和されてから、日本人旅行者が被害者となるひったくりや睡眠薬強盗も発生していますので、注意が必要です。」としている。また、ラオスでは汚職が問題となっており、政府は汚職の抑制に努めてきているものの、2012年におけるトランスペアレンシー・インターナショナル（TI）の腐敗認識指数によれば、合計 176か国中160位にランクされている。
ラオス公安省が主体となっている。公安省の管轄下にあるラオス国家警察は、かつての王国時代に設立されたラオス王立警察が前身となっている。
ラオス政府は、同国の少数民族であるモン族へ対し大量虐殺を行なったとして非難されている実情がある 。
ラオス 治安
NGOや人権活動家の報告によると、現地では個別の人権侵害事件が多数発生しているという。
一例としては、反体制的な政治的見解を表明したことによる投獄が国際人権団体によって大々的に報道されていた2人の元政府高官の不当な扱いを巡る事件が知られる。この人物らは3名で政府の政策に懸念を表明し、経済・政治改革を主張したとして1990年に逮捕されていた。
なお、元政府高官2人は2004年10月に釈放されているが、彼らと共に有罪判決を受けた3人目の反体制派の人物は1998年に獄中で死亡した。
また、1999年10月時点では、ラオス国内で平和的な経済、政治、社会の変革を求めるポスターを掲示しようとしたとして30人の若者が拘束された。その内5人は逮捕され、後に反逆罪で最長10年の懲役刑を言い渡されている。その後、1人は看守らの暴行により死亡し、1人は釈放された。生き残った3人は2009年10月までに釈放される筈であったが、行方不明の侭となっている。
ラオス 治安
2017年2月20日、裕福な中国人との偽りの結婚話で騙され、売春をさせられる女子高校生が増加していると地元メディアが報じた。以前より結婚や就職を隠れ蓑にしてタイへ少女を売る被害が報告されていたが、このタイルートに加え、近年は中国ルートが増加していることが人身売買を調査しているNGO団体職員により判明している。被害少女の多くは高校2、3年生が主体で、結婚のために学校を中退する。中国人は首都ヴィエンチャンを含むラオス全土で少女らに声をかけており、ラオス政府も事態を把握している。旧来から存在するタイルートでは役人への賄賂が常習化し、一つのビジネスとなっているが、中国ルートも同様になっている可能性が高い。ラオス国内の人身売買の実態は公式の調査が行われず、正確な被害数すら把握されておらず、人権団体の調査も政府機関の不透明な対応で妨害されがちであるという。
ラオス メディア
ラオスの新聞は、英語新聞『ヴィエンチャン・タイムズ』(Vientiane Times) およびフランス語新聞『ル・レノヴァテュール』(Le Rénovateur) を含めて全て政府機関発行である。更に、公認通信社カオサン・パテート・ラオ (Khaosan Pathet Lao, Lao News Agency) が同名の英仏語版新聞を発行している。主なラーオ語新聞としては『パサション』(Pasaxon)、『ヴィエンチャン・マイ』(Vientiane Mai Newspaper) がある。
ラオスでは、ラオス国営ラジオ (Lao National Radio, LNR) の放送が中波、短波、FMにて行われている。テレビは、ラオス国営テレビ (Lao National Television, LNTV) が2つのチャンネルで放送されている。また、タイのテレビ放送を視聴している人も多い。
ラオス メディア
一方で国境なき記者団が発表している世界報道自由度ランキングの2009年版では、中華人民共和国に次いで低い169位に選ばれている。
メッセージのやり取りにはWhatsAppやLINEといった外国製アプリの利用者が多いが、ラオスの通信会社シリチャルーンサイと政府が共同開発した「LoudChat」（ラウドチャット）のサービスが2022年4月に始まった。言論への監視・統制が行なわれているが、SNSでは政府批判が投稿されることもある。
ラオス 文化
ラオスの音楽文化は、カンボジア音楽やベトナム音楽など近隣諸国の音楽文化と多くの類似点が存在する。特にタイ音楽との類似点が多いことが知られる。
一般的な伝統衣装にはシュアウト・ラオと呼ばれるものが存在する。シュアウト・ラオはラーオ語で「ラオスの衣装」を意味する、文字通りの名称である。ほかにはスアパットという漢服に似通った形状の衣装があり、この衣装は長袖の仕様となっている。
ラオスを代表する歴史的建築物には仏教寺院であるワット・シェントーンが知られている。
ラオス国内には、ユネスコの世界遺産リストに登録された文化遺産が3件存在する。
ラオスには「ムエラオ」と呼ばれる伝統的な格闘技が存在する。
ムエラオはタイのムエタイやカンボジアのクン・クメールの原型とされている。
オリンピック
サッカー
ラオス国内ではサッカーが圧倒的に1番人気のスポーツとなっている。1990年にサッカーリーグのラオス・リーグが創設され、2013年にプロ化された。ペプシコーラがリーグに協賛しており、「ペプシ・ラオ・リーグ1」と呼ばれている。ラオスサッカー連盟（LFF）によって構成されるサッカーラオス代表は、これまでFIFAワールドカップやAFCアジアカップには未出場である。東南アジアサッカー選手権には12度出場しているが、全大会でグループリーグ敗退となっている。
Garnet OS
Garnet OS（ガーネットOS）は、ACCESS Systems（旧PalmSource）が開発・ライセンス提供するPDA用オペレーティングシステム (OS)。旧称Palm OS。
Garnet OS 概要
Palm OS Cobalt（コバルト）はもともとPalm OS 6として開発されてきたバージョンで、ハイエンド向け。Palm OS Garnet（ガーネット）は従来のPalm OS 5の進化系で、エントリーモデルに窓を開きつつ機能の強化を図っている。
数字でなく元素や宝石の名前をつけたのは、後者が前者の下位システムという位置づけではなく、それぞれ独自に発展していくことを示す狙いがあるとされる。
実際、ACCESS SystemsによればCobaltはそのソースコードの大半が書き直され、Garnetとは別物に仕上がっているという。
Garnet OS 製品シリーズの一覧
Palmデバイスを提供している（いた）メーカーと、製品ブランドの一覧。
OCaml
OCaml（[oʊˈkæməl] oh-KAM-əl、オーキャムル、オーキャメル）は、フランスの INRIA が開発したプログラミング言語MLの方言とその実装である。MLの各要素に加え、オブジェクト指向的要素の追加が特長である。かつては Objective Caml という名前で、その略として OCaml と広く呼ばれていたが、正式に OCaml に改名された。
OCaml 概要
もとはCamlという名前の、MLの方言の処理系実装、および言語であった。この名前はcategorical abstract machine languageの頭字語に由来する（en:Categorical abstract machineも参照）。やがて、categorical abstract machineよりも効率の良い抽象機械ベースに書き直され、クラスや継承などクラスベースオブジェクト指向の言語機能が追加され Objective Camlという名前になり、その後、略称だったOCamlを正式な名前とした。ウェブサイトの概要説明では「OCamlはCaml派生の言語の中で最も知られたものである」としている。もとの処理系も配布され続けており、Caml Lightという名前になっている。英語ではCamlはcamel（ラクダ）と同様に発音されており、アイコン等にもラクダを使っている。
OCaml 概要
MLの特徴の他に、関数型とオブジェクト指向の両方を併せもつことが特徴的である。ただしそのため、オブジェクト指向を利用した破壊的操作を伴うプログラムがかなり容易に書けてしまう。また、多相バリアント型という特殊なバリアント型により（通常のバリアント型については代数的データ型を参照のこと）、サブセットとスーパーセットの関係になっているバリアント型などを記述できるなどといった特徴もある。
処理系としての特徴は、関数型言語としてはかなり高速に動作することが挙げられ、gccでコンパイルされたC言語と互角かやや遅い程度と言われる。
関数型言語としては比較的アプリケーションの数が多く、例えばMediaWikiにおいてTeXの記述からHTML、MathMLおよび画像の数式を生成するプログラムもOCamlで記述されている。
OCaml Caml
Caml は OCaml の前身であるMLの方言とその実装である。現在も Caml Light という名前で配布され続けている。
MinCamlは、ペンシルベニア大学（当時）の住井英二郎がOCamlで実装した、Caml似のMLの小型版である。同作者により、コンパイラが OCaml 自身で書かれている。MinCaml は、2004年度の未踏ソフトウェア創造事業に採択された。
MinCaml コンパイラは教育目的での利用を主眼としている。わずか2000行前後のコードで書かれており、実装されている機能はMLのサブセットである。バックエンドはSPARCとx86に対応しており、ある程度の学習をすれば比較的容易に改造を行うことができる（実際、有志によってPowerPC用に出力できるバージョンも提供されている。バックエンドをLLVMに置き換えた例も報告されている。）。実際に東京大学理学部情報科学科などで教育目的に利用され、国内における OCaml および関数型言語の普及と理解に一定の役割を果たしている。
CamlやOCamlのような方言ではなく、SML（Standard ML）の処理系の実装にCaml Lightを利用している。完全なSMLを実装する。
OchaCaml など、研究用の改造のベースとして、規模の大きくなった OCaml ではなく Caml（Caml Light）を利用する例がみられる。
OCaml プログラム例
以下の例は、プログラム自体としてはMLと比べ特別なものでもないし、オブジェクト指向を活用したものでもないが、OCaml を含む Caml では旧来のMLや Standard ML からの記法や演算子や名前の変更が多く、簡単なプログラムでもそのままではエラーになるものが多いので、ここでは OCaml のコードを示す。
特徴として、型推論の活用により、多くの場合に型の宣言が必要なく、一部の静的型付き言語にありがちな煩雑さがないことが挙げられる。
Hello world の例を示す。以下のプログラム hello.ml は、
以下のようにしてバイトコードにコンパイルされる。
以下が実行結果である。
クイックソートのコード例を示す。MLは多くの関数型言語と同様、再帰処理に秀でる。また、Haskell などにも見られるパターンマッチの機能がここでも使われている。
以下は、ラムダ計算の教科書などに見られる、自然数のチャーチ符号化のコード例である。
チャーチ数nは、高階関数として表され、関数fと値xを受け取りxにn回fを適用する関数として定義されている。チャーチ数nを自然数nに変換するには、チャーチ数（実体は関数）に、インクリメントする関数と初期値0を渡せばよい。MLは関数型言語であるため、数学的なプログラミングの理論そのままに、記述することができる。
Eiffel
Eiffel（アイフェル、エッフェル）は頑健なソフトウェアの生産に注力したオブジェクト指向プログラミング言語である。
Eiffel 概要
1985年にバートランド・メイヤー（Bertrand Meyer）によって考案された。その文法はPascalを連想させるものである。Eiffelは静的な型指定を強く指向しており、かつ動的なメモリ管理（一般的にガベージコレクションにより実装される）を備えている。
少し前、オブジェクト指向の教科書的言語といえば、SmalltalkかEiffelか、という状況で、手続き型言語でのPascalのような存在であった。多重継承、ガベージコレクションといった特徴があるが、設計者によってライブラリのメンテナンスが重視されており、契約による設計（Design By Contract）の概念が全面に打ち出されている。同じくオブジェクト指向を取り入れた言語であるJavaほどは普及していない。Assertionなど、Javaが追いかけているところもあるが、インタフェースによる継承、GCあり、とかぶるところが多い。
また、C/C++のようにネイティブコードを直接生成するのではなく、C言語やJavaのコードを生成する、という特徴ももっている。
言語名の由来は、エッフェル塔ではなく、その設計者ギュスターヴ・エッフェルである。
Eiffel 基本構成
Eiffel のソースは以下のように記述する。
Eiffel は「クラスとはオブジェクトの生成機である」という考え方が徹底しており、このため両者の概念を混同するようなクラス変数やクラスメソッドの機能は存在しない。このことは「クラスもオブジェクトの一種である」と考える Smalltalk とは対照的である。
また「クラス」に対する考え方も独特で、例えば Java ではソースファイルをコンパイルすると「クラスファイル」というファイルを作るのを見てわかるように、一般的には「ソースコード」は「クラスの設計図」という概念であるのに対し、Eiffel では「クラス」とは「ソースコードそのものである」という考え方である。コンパイルして生成されるファイルは「クラス（ソースコード）によって作られたインスタンス」という考え方であり、このため Eiffel ではメインルーチンに相当する処理をコンストラクタで行う。
Eiffel 基本構成
コンストラクタはcreation下で宣言されたメンバ関数が使用される、このメンバ関数はどんな名称でも構わないが慣例的にmakeとする場合が多い。作成したクラスを使用する場合は
でインスタンスを作成する（コンストラクタが指定されているクラスは上記の構文中で必ずコンストラクタを呼び出さなければならない）。
クラスの継承を省略した場合は ANY というクラスの継承クラスとして扱われる。入出力などのグローバルな機能は ANY クラス内で定義されており、各 Eiffel のクラスではこれらの機能の実装に関して考慮をする必要性がないようになっている。
なお、Eiffelはクラス名は全て大文字で書かなければならないという命名規則がある。
Eiffel rename と redefine
Eiffel の特徴の一つとして、継承における細かい指定が可能ということが挙げられる。例えば
というコードがあるとする（ioは標準入出力を扱うインスタンスで、ANYクラスのメンバである）。これは A というクラスを継承した B というクラスに同じ名前のメソッドがある場合である。このとき
というコードを実行したとき。b.method1 はおそらく B で定義されたメソッドが動くと誰もが期待するだろうが、a.method1 で実行されるメソッドは A と B どちらで定義されたものだろうか?この場合の処理は言語によって異なっており例えばC++の場合は A で定義されたメソッドが実行され、Javaの場合は B のメソッドが実行される。すなわち言語によって動作が違うため作成者の勘違いなどによって混乱を招くおそれがある。
Eiffelでは実のところ、どちらが実行されるか以前に上記のような例ではコンパイルすることができないことになっている。すなわち Eiffelのメソッドは全てデフォルトでは継承不可である。しかしこれでは、あまりに制約が強すぎるため、同名のメソッドを定義する必要性があるときは、継承クラスの作成者がどちらを実行するかを指定することが出来る。
具体的には rename と redefine という機能があり、上記の例では A で定義されたメソッドを実行したい場合は
Eiffel rename と redefine
とする。この場合クラス B では A のメソッドを method2 という名前に改名させて、名前の衝突を防いでいる。B のインスタンスでも、クラス A のインスタンスとして扱われた場合（上記の例のような場合）は A の method1 が実行され、クラス B のインスタンスとして扱われた場合は B のmethod1 が実行される。B のインスタンスとして扱われた状態で A の method1 を実行するには上記の例では b.method2 とすればよい。これらの改名による効果は継承先と継承元の他、多重継承時のメソッド同士の衝突にも使用できる。
逆に A のインスタンスとして扱われる場合でも B の method1 を実行したい場合は以下のようにする。
この場合、クラス B はクラス A の method1 を継承時に破棄しクラス B で再定義することを示している。クラス B のインスタンスは A、B どちらで扱われても method1 はクラス B のものが実行され、クラス A の method1 はもはや実行されることは無い。なお再定義を宣言された method1 は必ずクラス B で再定義しなければならず、再定義していない場合はコンパイルエラーとなる。
このように、Eiffel ではクラスの継承時に継承クラスの作成者がメソッドの扱いを自由に設定することができる。
Eiffel コンストラクタの非継承
Eiffel の特徴の一つとして多重継承をサポートしていることが挙げられる。
多重継承時に問題となるものの一つとして、継承した二つの（あるいはそれ以上）のクラスのどちらにもコンストラクタが定義されている場合、二つのクラスのどちらのコンストラクタが実行されるか?というものがある。Eiffel の他に多重定義をサポートしている C++や Python では継承元のコンストラクタの実行順に複雑な規則が導入されている。
Eiffelではコンストラクタは継承されないことになっている。このためコンストラクタの実行手順といったものは原理的に存在しない。どうしても継承元のコンストラクタを使用する必要がある場合は、継承時に rename でコンストラクタとして宣言されているメソッドを改名し、改名したメソッドをコンストラクタ内で実行することで実装できる。
Sather
Satherはカリフォルニア大学バークレー校(UCB) と提携し、ICSI(International Computer Science Institute)によって開発されたオブジェクト指向プログラミング言語である。
言語仕様は、初期にはEiffelのサブセットであり、言語の基本的な枠組みや構文や表記もEiffelから大きく影響を受けている。Satherの名称もEiffel Towerに対し、カリフォルニア大学バークレイ校の構内にある、同校のシンボル的存在「Sather Tower」からとっている（塔つながり）。しかし、後には独自の拡張・工夫が、特に効率の面で多くなされている。
Sather 特徴
Satherは、ガベージコレクションを持ち、強く型付けされた、多重継承をベースにしたオブジェクト指向言語である。パラメータ化されたクラス、インタフェースの継承と実装の継承(include)の分離、動的ディスパッチ、イテレータ、高階手続き、例外処理、契約プログラミングなどの機能を持つ。
SatherはEiffelと同様にC言語にコンパイルされる。
pSatherはSatherの並行処理拡張版であり、分散処理にも対応する。
Prolog
Prolog（プロログ）は論理プログラミング言語の一つであり、該当分野で最もよく知られている論理型言語の代表格である。主に人工知能研究や計算言語学との関連性を持つ。定理証明、エキスパートシステム、自動計画、自然言語処理とも繋がりが深い。形式論理である一階述語論理を基礎にして、事実群と規則群の表現および関係の観点に立った宣言型パラダイムに準拠しており、その関係に則った質問によって計算が開始されるという性質を持つ。
Prologは、1972年にマルセイユ大学のアラン・カルメラウアーとフィリップ・ラッセルによって開発された。フランス語の「programmation en logique」がその名の由来である。Prologの誕生にはエディンバラ大学のロバート・コワルスキが考案したホーン節が大きく寄与している。カルメラウアーによる元祖版はマルセイユPrologと呼ばれている。その後、コワルスキの門弟のデヴィッド・ワーレンが1977年に改訂開発したエディンバラProlog（DEC-10 Prolog）が標準になってPrologは広く普及した。
Prolog 概要
1972年ごろにフランスのアラン・カルメラウアーとフィリップ・ルーセルによって考案された。
成立の事情から、Prolog プログラムは論理式とみなされ、その実行は述語論理によって述語が定義された環境における定理証明に擬して解釈されることが多い。利用者は論理プログラミングの枠組みを、取り分け述語論理を学習することで、この枠組みに極めて忠実なこの言語の基礎的な構造のほとんどを理解できる。その言語仕様はこの枠組み以外には考案者たちも含めてそれ以上の拡張をほとんど行っていないため、他のプログラム言語とは異なり、学習しなくてはならない概念や用語もまた、述語論理のものだけでこと足りる。基本的に計算機科学の新しい概念や新しい手法とは無縁である。ただし、SWI-Prolog等の処理系では様々な機能拡張の試みが行われている。一階述語論理は型理論や操作的意味論の研究論文で多数用いられており、今後、再注目される可能性がある。
Prolog のプログラムは一階述語論理に基づいてデータ間の関係を示す命題として記述され、処理系がそれらに単一化(ユニフィケーション)と呼ばれるパターンマッチングを施しながら、与えられた命題が成立するか再帰的手続きによって探索している。
Prolog 概要
プログラムの実行は述語集合が定義された環境の元で、質問することによってなされるが、これは反駁という述語論理的な証明過程を模して、処理系が用意する導出木と呼ばれるグラフをたどって解を得る過程である。
Prolog のもととなるこの演繹手法は導出と呼ばれ、自動定理証明の研究において Prolog 開発以前からよく知られていた。Prolog は、導出において節を頭部が一つの命題からのみなるホーン節に限定したもので、この場合の導出をSLD導出（Selective Linear resolution for Definite clause）と呼ぶ。ホーン節に限定しているということは、つまり、Prolog は任意の述語をそのまま扱えるわけではない。Prolog が述語の形式をホーン節に限定した理由は、もし頭部に項の連言を認めるならば、導出時の計算量が爆発的に増大して、全ての解を得ることの保証が難しくなることが必至だからである。
述語論理を論理的な背景に持つことによって、Prolog のプログラムはその正しさを確認することが比較的容易である。同時に、プログラマは Prolog でプログラミングすることが何を意味するかを明確に理解した上で、プログラムを書いていくことができる。
Prolog 概要
上記は Prolog の一つの解釈である。一方、Prolog というプログラム言語を述語論理という枠にはめないで捉える立場もある。導出、単一化、非決定性、双方向性、関係データベースといったこの言語に独特の機能とその表現力、記述力に着目し、そのプログラム言語としての可能性を率直に評価しようとするものである。
新たに Prolog を学びたいと思う人は、他のプログラム言語を全く知らなくても、ソフトウェア科学的な予備知識や概念に不通であっても、単一化という単純なルールをほとんど唯一の基軸として、パズル的な、あるいはゲーム的な感覚にだけ導かれて、プログラムを簡単に書き進むことができる。さらに、どの言語にも比して平坦で、平明な言語構造を持つ Prolog はラベル名（アトム、関数名、述語名）に適切な意味性を付与することにより、自然言語の領域にも接近したプログラミングが期待できるほとんど唯一の言語でもある。
十分述語論理的な教養を持った上で Prolog を学び、そのプログラムを書くならば、短期間で高度で安定したプログラムを書くことができる。しかし、それを前提としないでも、Prolog は冒険的で、未知の領域に満ちたプログラム言語なのである。
実はこれらの主張は、述語論理的な主張に隠れて、これまであまり強調されたことがなかった。
Prolog 概要
このような立場や主張が生まれる背景には、Prolog が期待されたほどにはソフトウェア革新の担い手になり得ていない理由が、その後の数理論理学の学問的な評価をもって、プログラム言語としての可能性を十分検証することを放棄して、定理証明といった狭い目的へ封じ込めようとする風潮を生んだことにある、という反省がある。そのことを踏まえて、Prolog が述語論理から成立したことにこだわらず、実在するプログラム言語として自由な視点からこの言語を見直そうとするものである。
Prolog は LISP の資産の多くを継承して間違いなく記号処理用の言語であるが、人工知能言語として分類されることも多い。これは、人工知能の世界では述語論理が古くから理論的な柱の一つとなっているからである。述語論理を基礎とするトップ・ダウン式の問題解決と同じく述語論理を基礎とする Prolog の駆動機構の相性は当然良いため、人工知能研究に広く利用されてきた。特にエキスパートシステムで多用されるプロダクションシステムにおいては、ルールを自然に自ら動的に変更できる能力を持つことと、後ろ向き推論と呼ばれる推論が Prolog の導出過程そのものであることから、その最も主要な記述言語の位置を占めてきた。
Prolog 概要
Prolog は一階の述語論理に対応することから論理型言語に分類される汎用言語であるが、その主張の一行一行を独立して論理式とほとんど等価な表現で行うことから、最も代表的な宣言型言語と見なされている。Prolog のプログラム単位である述語の各節の本体に現れる質問単位である副目標数は平均5個以内と極めて少ない。この副目標と各節の頭部に現れる引数の組み合わせによって得られる関係が述語の意味を構成している考えられる。これが宣言型とされるゆえんである。
単一化は1960年代の述語論理理論の発展の鍵となった概念であるが、Prolog が述語論理に導かれて機械による自動証明を実現するためのプログラム言語として成立したことから、必然的にこの言語の必須の最も重要な機構となった。単一化は副目標（質問）と対応する定義節の頭部のパターンが完全に一致するか、調べることで、節の選択を可能にする。さらに、Prolog の実行順序等の制御は単一化のからくりを利用してプログラミングされる。
Prolog 概要
簡単なからくりでかつ極めて強力な単一化であるが実行コストも大きい、すなわち実行速度が遅くなる原因となる。さらに、パターンとして認識することと引き換えに、引数での関数評価は不可能になった。独立して節の本体で式評価を記述しなくてはならないため、数値計算ではやや冗長になる。
これらの点は、単一化の強力さとのトレードオフの関係になっている。
型付けは動的型付けに分類できるが、言語仕様の中に型概念は登場しない。上記の単一化、バックトラッキング、と論理変数の束縛においては独特のものがあり、その実行は型推論の実行過程に酷似している。既に Prolog はその引数の引渡し時に単一化という厳密なパターンマッチングを施すことに多大なコストを掛けた。単一化だけでプログラムをコントロールできる言語が Prolog であるといっても過言ではない。この単一化のみによる簡素で強力なプログラムコントロールの足を引っ張ることに成り兼ねない、型付けの強化は、Prolog 言語とその支持者によって受け入れられることはないだろう。
Prolog は言語による思考をモデル化して主語・述語といった意味での文中の述語を特に重視して記述する系である。この一点からも、対象物を中心に記述していくオブジェクト指向とは距離が大きい。述語論理以前にオブジェクトありきとする立場を一般には取らない。
Prolog 概要
いくつかの処理系では、オブジェクト指向言語としての拡張が行なわれているが、オブジェクトを中心に設計されることは、論理プログラミングを重視して記述される限りほとんどない。分類するならば、非オブジェクト指向言語に分類される。オブジェクト指向に拡張された言語としては
が存在する。
後に述べるが Prolog の述語はその構造が頭部と本体と分かれていて、本体はルールを意味するため、全体として、ルールを持ったデータベース、演繹データベースとして捉えることができる。これはPrologプログラム全体がデータベースであるということだから、データベースの表現としては最強のクラスに属する。一方、事実を表す本体のない（強制的に真）頭部のみの定義節による述語は関係データベースとその集合論的な性質で一致する。収集した情報を一つの述語に対して多数の頭部のみを持った節の集まりとして定義することにより、オンメモリ関係データベースを構築することが可能である。しかし、Prologをデータベース管理システムとして捉えた場合、
assert、retract、setof、bagof、findall という組込述語を持つこと以外には、管理機構としての特別の組込述語が用意されている訳ではなく、ディクショナリ管理などのための述語定義をユーザが追加する必要がある。
Prolog 概要
関数型言語等、他のプログラミング言語と比較しての Prolog の特長は、上記、一階述語論理に基づくこと、単一化、データベース言語的性格の他に、非決定性と双方向性が挙げられる。
非決定性は、解が唯一とは限らない場合、処理系側から見てひとつの解に決定できない場合、外部からの選択の余地を与える。そういうことが当然可能なこととして述語は定義されていく。インタプリタトップではなく、導出を繰り返すプログラム内部にあっては、処理系側とした所を述語と置き換えて考えると、非決定性の述語の解を決定するのは、前方または後方に連接する質問（副目標）である。前方の副目標群から引数経由で与えられる情報によって副目標は一つの解を作り出すが、この解が真であるとするのは最終的に後方に連接する副目標である。この後方に連接した副目標が全て真となった場合に限り副目標は真となる。後方に連接する副目標のどれかが真にならなかった場合は、それが存在すればであるが別解を用意しなくてはならない。ここでも非決定性の述語、ここでは副目標から見ての解の決定権は、外部にあるということになる。
Prolog 概要
非決定性は導出の過程、取り分けバックトラックアルゴリズムと一体化しており、Prolog プログラムの制御の根幹のひとつである。ただ、非決定性述語実行時に見られる論理変数の 束縛→解放→再束縛という遷移、すなわち一度束縛されたものが別のものに再度束縛されるということを好ましくないとする見方もある。
双方向性は、述語が実行された場合の返り値は真または偽だけであり、その代わりとして引数内の変数で値の授受を終始するのだが、このとき、入力として使われた変数が出力に、出力として使われていた変数が入力として使うことのできる述語となることがある。この性質を双方向性という。多くの場合、双方向性を持つ述語はそれ自体多義性を持つ。例えば append という3引数の述語は第一引数と第二引数に具体的なリストが来て呼ばれた時は、リストを結合する意味でよいが、第三引数がリストで第一引数と第二引数が変数の状態で呼ばれた場合その意味は、リストを分解する、がふさわしい。既に存在するリストを、それが結合されて存在したものと考え、それではどのように結合されていったか、あるいは、どのような組み合わせで結合されていったのかを、示していると解釈できる。
このような、双方向性は Prolog の述語自らがリバースエンジニアリング的開示能力を持ち、それを示していると捉えることができる。この性質は、Prologを含む論理型プログラム言語の持つ際立った特徴であり、プログラム作成時はもちろん、テスト、デバッグなどの検証の各段階でプログラムコードに対する見通しを向上させる。
プログラマは引数の単一化、再帰/失敗駆動等のプログラムパターンの選択、非決定性、双方向性といった特長をできる限り生かすことなどに配慮しながら、述語の骨格を決めプログラミングを進める。しかし、これらの特長、性質は複合した場合には相当に複雑であり、制御上相反する部分も多々ある。Prolog では、述語論理を逸脱して計算量/資源量/制御の調整に当たる述語「!」（カット）を導入してこの問題に対処しているが、Prolog プログラミングの難しさはこの調整部分に集中している。
Prolog 歴史
Prolog の性格上、その歴史には定理の自動証明の研究が大きく関係している。1930年にジャック・エルブランは自動定理証明やPrologのベースとなる数理論理学上の基本定理であるエルブランの定理を発表した。エルブランの論文には Prolog で必須の単一化アルゴリズムもすでに含まれていた。
Prolog 歴史
1950年代以降、計算機上での定理証明の研究が活発になり、ギルモアのアルゴリズム(1960)やデービス・パトナムのアルゴリズム(1958,1960) 、プラウィツによる定理証明への単一化アルゴリズムの導入(1960)などを経て、1965年のロビンソンによる導出原理 や1960年代後半のラブランドによるモデル消去の証明手続きの成果からひとつの結実期を迎えた。その数年後の1971年マルセイユ大学のアラン・カルメラウアーとフィリップ・ルーセルのグループは自動定理証明システムとフランス語の自然言語解析システムとを組み合わせたコンピュータとの自然言語対話システムを作成していた。この際に自然言語解析システムも自動定理証明システムと共通の論理式という枠組みで構築できることに気が付き、論理式をそのままプログラムとして実行できる最初の Prolog を1972年に完成させた。これは数千年に及ぶ人類の叡智である論理学の成果をプログラム言語に置き換えたものと言えるが、現在の Prolog でプログラムの制御に使われるカットオペレータに相当する機能が最初から導入されるなど、現在の Prolog と同様、単なる定理証明システムではなくプログラミング言語として設計されたものだった。以下にその当時の Prolog プログラムの一部を示す。論理変数名の最初の文字が "*" で始まるなど、現在の Prolog とはシンタックスが異なる。
Prolog 歴史
彼らグループに理論的な助言を与えていたエジンバラ大学のロバート・コワルスキとデービッド・H・D・ウォレンは汎用機 DECsystem10 上にマルセイユ大学とはシンタックスが異なる処理系を作り上げた。これは後に DEC-10 Prolog と呼ばれることになるが、ISO 標準規格を含む今日動作する Prolog 処理系はほとんどがこの系統のシンタックスに従っている。
コワルスキはその後、インペリアル・カレッジ・ロンドンに移り、1979年に集大成ともいえる「Logic for Problem Solving」を著し、その後のこの言語と論理プログラミングの研究に決定的な影響を与えた。
Prolog 歴史
コワルスキの活動と DEC-10 Prolog の存在によって、英国は Prolog 研究の中心地となった。エジンバラ大学のW・F・クロックシンとC・S・メリシュの著わした「Programming in Prolog」は長く Prolog のバイブル本として利用された。エジンバラ大学からSRIインターナショナルに転じたディビッド・ウォレンは1983年 Prolog の仮想マシンコードであるWarren's Abstract Machine（WAM）を発表した。この後の Prolog 処理系の実装は、一旦C言語などでこの仮想マシンコードを実装して、その上で Prolog のソースコードをこのマシンコードに変換するコンパイラを用意するという手順を踏むことによって、開発を簡素化し実装上の標準化を図ることが普通になった。日本の新世代コンピュータ技術開発機構の Prolog マシン PSI は1987〜1988年頃に開発された PSI2 からこれを採用したし、その後開発された Prolog 処理系の多くはこの方式に従った。
Prolog 歴史
1976年にSRIに留学していた古川康一はカルメラウアーらの Prolog 処理系のリストを見つけ帰国時に電子技術総合研究所に持ち帰った。当時電子技術総合研究所で推論機構研究室長をしていた渕一博はこのリストを解析して Prolog 処理系を走らせ、ルービックキューブを解くプログラムを作成するなど論理プログラミングに対する理解を深めていった。
1978年MITに留学中の中島秀之が「情報処理」誌に紹介記事を寄稿して、Prolog は日本でも広く知られるようになった。
Prolog 歴史
1970年代終り頃、日本では通産省の電子技術総合研究所の渕一博を中心とするグループが論理プログラミングの重要性を認識して、日本のコンピュータ技術の基礎技術としてこれを取り上げることを提案する。これが最終的に1980年代の新世代コンピュータ技術開発機構の発足と活動につながった。総額約570億円の国家予算を約束されて1982年に新世代コンピュータ技術開発機構（ICOT）は活動を開始する。Prolog を含む論理型言語はこの研究の核言語と位置づけられ世界的な注目を浴びることとなる。約10年間の研究活動中に Prolog と論理プログラミングの研究は急激に深化した。実際1980年からの20年間に Prolog をメインテーマにした日本語の書籍は約50冊発刊された。ICOT の研究員は積極的に Prolog の啓蒙に努め、講習会、チュートリアル、ワークショップを年に一度ならず開催した。ICOT が主催したロジック・プログラミング・コンファレンスは1983〜1985年頃をピークに若い研究者達を刺激した。研究活動前半の期間では論理型言語の実用性を証明するために、Prologマシンが設計され、三菱電機と沖電気によって製作され、ICOT の他大学等研究機関に配布された。この個人用逐次推論マシン PSI の機械語 KL0 は単一化やバックトラックなど Prolog の基本的特徴を完全に備えていた。この KL0 によって、PSI のマイクロコードを制御した。KL0 を基礎として、オペレーティングシステム SIMPOS が設計され、これを記述するために、Prolog にオブジェクト指向プログラミングを取り入れた ESPが近山隆により設計されて使われた。ESPは多重継承を特徴とする当時としては先鋭のオブジェクト指向言語であったが、後にカプセル化の不備などが指摘されて、今日あまり話題となることはない。しかし、OSを記述するという課題を通じて、論理型言語にオブジェクト指向言語的要素を加えることによって、可読性が高まりプログラム管理がしやすくなることが確認された。その反面、Prolog のみでオペレーティングシステムを完全に記述してみる絶好の機会を逸したことも確かである。ESPはPSIを前提にせずに利用できるように、C言語で書き直したCESPが開発されたが、これが普及への起爆剤になることはなかった。後に述べるように、PrologのISO標準規格のモジュール仕様としてESPの採用が否決された1995-6年頃以降はほとんど利用されることはなくなった。
Prolog 歴史
ここまで述べたように、Prologは ICOT によって持ち上げられた言語 Prolog との印象が強いが、Prolog というプログラミング言語から見ての ICOT の影響は実は限定的だった。淵所長ら ICOT の主研究テーマは並列論理型言語にあり、研究後半では Prolog そのものからは離れて行くことになる。PSI に使用した電子基盤を利用して並列推論マシン PIM が製作されて、Guarded Horn Clauses（GHC）に基づく並列演算処理を追加した KL1 が設計された。この環境に依存する形で、並列論理プログラム言語のKL1は知識プログラミング全般の研究に利用された。PSI と SIMPOS を使った研究も続けられはしたが、割り当てられた研究員の数は極めて少なかった。
ICOT の活動を総括して、知識プログラミング各課題において準備不足からくる未消化を指摘する向きが強いのだが、こと Prolog から見ての前半期の活動は、今日語られることも少ないが、極めて充実したものであったといえる。
Prolog 歴史
ICOT の活動盛期の1984年京都大学の学生3名が研究課題として製作した Prolog-KABA がその性能の高さとアセンブラで記述されたことからくる高速性で世界を驚かせた。この処理系は MS-DOS 上で製品化されて Prolog の普及に大きく貢献した。Successful pop や末尾再帰の最適化など高い安定した性能で黎明期のパソコン上のビジネスソフトの基礎言語としての展開も期待されたが、16ビットの整数しか持たず、浮動小数点数も扱えない仕様であったため、この分野への展開は起こらなかった。この点はアセンブラで記述されて簡単には拡張できない点が裏目に出た。結果としてこの仕様の乏しさが、日本のビジネスソフトが知識プログラミングの水準との間に横たわる分水嶺を越えることができなかった原因の一つとなった。
Prolog 歴史
1990年代に入ると制約論理プログラミングが注目され処理系が多数誕生した。これは Prolog から見ると引数の論理変数間の関係（制約）を記述可能に拡張したものである。制約論理型言語は、変数評価に遅延実行などを持ち込むことが必要となるが、連立方程式をはじめとする多くの課題で Prolog より記述が柔軟になる。Prolog の組込述語には引数が変数で渡るとエラーとなるものが多く、このため Prolog プログラマは変数が具体化されるように副目標の記述順序に気を配る必要がある。結果としてプログラミングに逐次性が生じる。制約論理プログラミングにおいては、後に変数が具体化されたときに検査されるための変数の間の制約を記述するだけで、この逐次性の拘束を解決して通過することができる。実はこの制約はPrologから見ても自然な拡張であり、むしろ Prolog の単一化が制約論理プログラミングの制約を「=」のみに限定したものだと解釈することができる。しかし、簡素で逐次的な性格を強く持つ Prolog の処理系に慣れた利用者が、制約論理プログラミングの述語中に更に変数制約の宣言を追加しなくてはならない負担を、受け入れているとは言い難い。制約論理プログラム処理系が Prolog のそれに置き換わる気配は、2013年11月現在においてもない。
Prolog 歴史
ISO の標準化作業は1987年頃から作業委員会(WG17)が作られ、日本委員も情報処理学会から15名ほどがこれに加わった。1995年 ISO標準規格がISO/IEC 13211-1 Prolog-Part 1: General Coreとして制定された。さらに、2000年にはISO/IEC 13211-2 Prolog-Part 2: Moduleとしてモジュール仕様が追加して規格化された。モジュール仕様については日本委員から、ICOTによって作成されたESP(Extended Self-contained Prolog)を以てその標準とする案が出されていたが、これは否決された。
Prolog 歴史
ISO標準規格はエジンバラ仕様 DEC-10Prolog を基調に既に一家をなしていた Quintus Prolog など有力ベンダと主としてヨーロッパの学者を主体にこれに日本などの委員が参加して作成された。この規格は現在 Prolog 処理系の製作者に指針を与え、大きな逸脱を心理的に妨げる役割を果たしているが、組込述語の個々の仕様ではベンダの意向が強く反映されたものの、全体としては最初に述べた論理学的立場を尊重して保守的で極めて小さな仕様となっている。そのため多くの Prolog 処理系はこの規格の述語を搭載しつつ、独自の拡張部分を修正したり削除することに消極的である。結果として個々の処理系の互換性の乏しさは残り、それは Prolog の弱点として認識されている。
JIS規格も一旦は2001年にJIS X 3013:2001が、"標題 プログラム言語Prolog―第1部：基本部"が要約JISとして発行されたが、2012年1月に何ら実効を見ること無く、「周知としての目的は終了した」として廃止された。
Prolog 歴史
日本において、ICOT の活動時期から1990年代前半に掛けては、いわゆる人工知能ブームの時期であり、人工知能研究への期待はこの時期再び異様に高まった。LISP マシンによる医療情報エキスパートシステムでの成果は、人工知能の研究の成果の一部は情報処理に於いても利用可能なのではないかとの夢を抱かせた。このような評価の中で Prolog は人工知能のアセンブリ言語的な位置づけを期待された。知識情報処理はこの水準の言語を基礎にその上側に築かれるべきだとの意味である。手っ取り早く利用可能な人工知能技術としてエキスパートシステムが選別され、これを支えるナレッジエンジニアの存在とそれを養成するための教育が必要とされた。Prolog はその中心に存在した。日本も例外ではないが、日本以外の国では特に、Prolog の名著は1990年代前半に刊行されている。これは、ICOT の活動とは若干のタイムラグがあるが、この時期社会的に 人工知能向き言語としての Prolog に大きな期待が寄せられていたことの証しである。エキスパートシステムはビジネス分野において広範囲に応用可能な基礎技術であったが、このような低水準な分野への適用はあまり試みられず、この分野からの Prolog 言語への要請はほとんど見られないまま終った。
Prolog 歴史
機械翻訳などの自然言語処理もまた人工知能の一翼を担う分野であるが、歴史的経緯から人工知能ブーム以前から、この言語に最も期待が掛けられた分野であった。しかし、左再帰問題の回避でトップダウン解析の明解さをいきなり殺がれた。さらに句構造文法への適用においては、Prolog が得意とする、句構造に分解して意味に相当するグラフを形成することの他に、極めて膨大な辞書を構造体として定義する必要が展望された。この辞書作成は Prolog とは直接関係しないタスクであることから、次第に Prolog は句構造文法によるアプローチの前線から後退してしまった。統計的言語処理のアプローチでは、単一化等に多くの計算量を費やす Prolog は大量データを扱うのに不向きとされて、利用されることはほとんどない。自然言語処理のテキストの多くが Prolog を用いて解説されているにも関わらず、期待が大きかった割に実務的には、表面に現れている成果はIBM社のワトソン程度にとどまり、自然言語処理はむしろ Prolog 評価の足を引っ張る傾向にさえある。