- 締切済み
Prologに関する質問
いま, Prologで再帰プログラムなどを組んでるんですが先生に「Prologはアルゴリズムの勉強になるから他の言語になっても無駄が省けますよ」と言われました。私は, 非手続きか手続き言語かの違いしかわからないのですが実際のところこれは事実なのでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- cametan_42
- ベストアンサー率62% (162/261)
僕も最近Prologで遊んでました(笑)。んで、まあ、感想等を。 多分「計算量」とは言っても言語が裏で実際に行ってる計算量の事の事なんじゃなくって「計算の為の記述」の量、って事じゃないんでしょうか?僕も触った感じ、そんな気がしました。かなり抽象度が高い言語ですね。 実は、「アルゴリズム"だけを"を書く」事を考えた場合、通常の手続き型言語なんかは「作法」と言うか「そのプログラミング言語特有の」書式が邪魔になると言うか、「余計な記述量が増える」んです。そっち側に手間取る。 例えばC言語だったら#include...みたいな「オマジナイ」とか、ですよね。本質的にはそう言う「お約束」はアルゴリズム自体には何も関係なかったりして。 一方、Prologは、例えば数学的な意味でのアルゴリズム(数式)に殆ど1対1で対応しているような感じです。Haskellもそんな感じですが、Prologはもっと凄いですね(笑)。何せ、数学的に考えられるだけの「条件を列挙していけば良い」って言う愚直な感じなんで。関数型言語も記述能力自体は高いですが、それ以上だよな、とは思いました。「それ以上」が必要か否かは好みの問題になってくるでしょうが。 まあ、いずれにせよ、確かにそう言う意味ではPrologを使うと「アルゴリズム記述だけに」集中出来るのは事実だと思います。バカみたいに直球勝負だよな、って印象です(笑)。 その先生がそう言う意味で仰ってたのかどうかは分かりませんが、一応参考までに。
- ken-etsu
- ベストアンサー率46% (55/119)
計算量の無駄ですか… んー、どうでしょう?一般には、Prologで書くのは計算量的に有利には働かないと思います。なので、他の言語ではPrologより無駄を省いたプログラムが書ける、ってことなのか…? 先生のお話を詳しく聞いてみないと、真意を掴みかねます。
- kabaokaba
- ベストアンサー率51% (724/1416)
まちがってはないし,Prologのような古典的な言語は アルゴリズムの勉強にはいいのかもしれません. けど,それをいうなら Lisp(Common LispとかScheme)もそうだし, 新しいけどHaskellなんかもいいとおもう. Prologも含めてこいつらは癖があるけども アルゴリズムを直接ごりごり書くのが比較的容易. 関数型言語というか 「宣言型」のプログラムが容易な言語は アルゴリズムを書きやすい傾向があると思う. 一個だけじゃなくって,複数の言語で 同じことをさせてみると結構勉強になりますよ. 「無駄な計算量が省けるか否か」は アルゴリズムそのものの計算量の問題もあるし, どんな言語だって 「無駄な計算を紛れ込ませてしまう」ことは よくあることです.
- ken-etsu
- ベストアンサー率46% (55/119)
あなたの先生の言うことは間違ってはいないと思います。 まあ、「無駄が省けますよ」ってのは本意が解りませんが、いろんなタイプの言語に触れるのは、視野が広がりますし、悪いことではありません。
補足
補足です 無駄は無駄な計算量だそうです。
補足
#2の回答者さんを参考にして考えるとPrologでゴリゴリとアルゴリズムを書く→手続き型言語になったときに無駄にfor文を書いたり, 無駄に再帰させたりすることを防げるということだと思います。 劇的に計算量はかわりませんが無駄な行を減らせるという点では有益なのでは?