見出し画像

Prologでプログラミングを学んでいます(論理型プログラミング)

 AI言語Prologによるプログラミング学習の第1回です。テキストは、まったく筋の通った…です。
 内容は、論理型プログラミングについてです。始めにパラダイムについての説明を行いました。

プログラミング言語パラダイム

 言語パラダイムとは、言語の分類のようなものです。パラダイムには、命令型プログラミング、関数型プログラミング、論理型プログラミング、分散型プログラミング、データベースなどがあります。
 分類なので、分ける人により多くも少なくもなります。例えば、命令型プログラミングを、さらに、構造化プログラミング、オブジェクトプログラミングに分けることもできます。

 パラダイムは、画期的なプログラミング言語が登場したときに、その特徴をまとめることで定義されます。
 これは、優れたスポーツ選手が現れたときに、その選手の特徴的な動作に名前が付けられるのに似ています。マラソンのxx走法や、水泳のxx泳法、将棋のxx戦法などです。

 後から登場するプログラミング言語は、既存言語の長所を取り込むことがあります。そのため、一つのプログラミング言語が複数の言語パラダイムに属することもあります。
 私が、選んだPrologは論理型プログラミングに属します。
 では、本題です。


論理型プログラミング

 論理型プログラミングとは、70年代に登場したプログラミングパラダイムの名前である。
 論理型プログラミングでは、プログラムを理論と考え、プロシジャ呼び出しを、真偽を明かにする必要がある定理と捉える。
 しがって、プログラムの実行は証明を探すことを意味する。

命令型プログラミングとの違い

 伝統的(命令型)プログラミング言語におけるプログラムとは、如何にして問題を解くかについての手続き的な指示書である。
 これに対し、論理型プログラミングで注力するのは、問題が如何なるものであるかについての宣言的な明細書である。

変数の違い

 命令型言語においては、変数とは記憶域の名前であり、そこには所定の型のデータを格納することが可能となっている。
 これに対し、論理型プログラミングの変数は、数学の変数に似ており、如何なる値にも置き換えることができる。

機械モデルの違い

 命令型と論理型とは、仮定する機械モデルの点でも異なる。機械モデルとは、プログラムが実行される計算機を抽象化したものである。

 命令型は、状態に基づく動的な機械モデルを仮定し、計算機の状態は記憶領域の内容として与えられる。プログラム文の作用は、一の状態から他の状態への遷移である。

 論理型は、そのような動的な機械モデルを仮定しない。計算機とプログラムは世界における所定の知識を表し、その知識は問合わせの回答に用いられる。 


まとめ

 今回は、論理型プログラムについて学びました。テキストの説明が丁寧でわかりやすかったです。
 特に、命令型プログラミング言語における変数が一体何であるのかがようやくはっきりしました。
 次回からは、節形式論理の簡単な入門です。いよいよPrologが登場します。

おまけ

 今回は、Prologについて一言も触れられていませんでした。次回からもPrologの紹介はありません。
 そこで、Prologがどのような言語なのかネットで調べました。
 では、どうぞ。

 実績も実力も申し分ないのに、商業出版の担当者の見る目がないために声がかからない悲運の有能執筆者が、比類なき知識を駆使して低俗な二次資料を格調高き文体にて高尚なる名文へと昇華させ、碩学の義務から浅学のWeb編集者を導いて検索結果を一色に塗り替える、まさに叡智の結晶、現代のアレキサンドリア、一杯のコーヒーとも呼ぶべきWikipediaによれば、

Prologは…プログラム言語なのである。

https://ja.wikipedia.org/wiki/Prolog

 別にWikipediaを嫌っているわけではありません。
 むしろWikipedia運営が、執筆者たちの能力を信用していないから、二次資料(本職の研究者等の著作物)を丸パクリしろ!自分で書くな!というルールを設けているのは、文体から滲み出るWikipediansの姿勢に対して皮肉が効いており、好きです。

古往今来得ざれば即ち書き得れば即ち飽くは筆の常也。と云うわけで御座います、この浅ましき乞食めに何卒皆々様のご慈悲をお願い致します。