• 締切済み

Prologに関する質問

いま, Prologで再帰プログラムなどを組んでるんですが先生に「Prologはアルゴリズムの勉強になるから他の言語になっても無駄が省けますよ」と言われました。私は, 非手続きか手続き言語かの違いしかわからないのですが実際のところこれは事実なのでしょうか?

みんなの回答

回答No.4

僕も最近Prologで遊んでました(笑)。んで、まあ、感想等を。 多分「計算量」とは言っても言語が裏で実際に行ってる計算量の事の事なんじゃなくって「計算の為の記述」の量、って事じゃないんでしょうか?僕も触った感じ、そんな気がしました。かなり抽象度が高い言語ですね。 実は、「アルゴリズム"だけを"を書く」事を考えた場合、通常の手続き型言語なんかは「作法」と言うか「そのプログラミング言語特有の」書式が邪魔になると言うか、「余計な記述量が増える」んです。そっち側に手間取る。 例えばC言語だったら#include...みたいな「オマジナイ」とか、ですよね。本質的にはそう言う「お約束」はアルゴリズム自体には何も関係なかったりして。 一方、Prologは、例えば数学的な意味でのアルゴリズム(数式)に殆ど1対1で対応しているような感じです。Haskellもそんな感じですが、Prologはもっと凄いですね(笑)。何せ、数学的に考えられるだけの「条件を列挙していけば良い」って言う愚直な感じなんで。関数型言語も記述能力自体は高いですが、それ以上だよな、とは思いました。「それ以上」が必要か否かは好みの問題になってくるでしょうが。 まあ、いずれにせよ、確かにそう言う意味ではPrologを使うと「アルゴリズム記述だけに」集中出来るのは事実だと思います。バカみたいに直球勝負だよな、って印象です(笑)。 その先生がそう言う意味で仰ってたのかどうかは分かりませんが、一応参考までに。

  • ken-etsu
  • ベストアンサー率46% (55/119)
回答No.3

計算量の無駄ですか… んー、どうでしょう?一般には、Prologで書くのは計算量的に有利には働かないと思います。なので、他の言語ではPrologより無駄を省いたプログラムが書ける、ってことなのか…? 先生のお話を詳しく聞いてみないと、真意を掴みかねます。

garusu
質問者

補足

#2の回答者さんを参考にして考えるとPrologでゴリゴリとアルゴリズムを書く→手続き型言語になったときに無駄にfor文を書いたり, 無駄に再帰させたりすることを防げるということだと思います。 劇的に計算量はかわりませんが無駄な行を減らせるという点では有益なのでは?

  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.2

まちがってはないし,Prologのような古典的な言語は アルゴリズムの勉強にはいいのかもしれません. けど,それをいうなら Lisp(Common LispとかScheme)もそうだし, 新しいけどHaskellなんかもいいとおもう. Prologも含めてこいつらは癖があるけども アルゴリズムを直接ごりごり書くのが比較的容易. 関数型言語というか 「宣言型」のプログラムが容易な言語は アルゴリズムを書きやすい傾向があると思う. 一個だけじゃなくって,複数の言語で 同じことをさせてみると結構勉強になりますよ. 「無駄な計算量が省けるか否か」は アルゴリズムそのものの計算量の問題もあるし, どんな言語だって 「無駄な計算を紛れ込ませてしまう」ことは よくあることです.

  • ken-etsu
  • ベストアンサー率46% (55/119)
回答No.1

あなたの先生の言うことは間違ってはいないと思います。 まあ、「無駄が省けますよ」ってのは本意が解りませんが、いろんなタイプの言語に触れるのは、視野が広がりますし、悪いことではありません。

garusu
質問者

補足

補足です 無駄は無駄な計算量だそうです。

関連するQ&A

  • 昔使っていた言語って覚えてますか

    ソフトウェアの匠という本を読んでいたら、まつもとゆきひろ氏がPrologでのプログラム解説をおこなっているのを見て、よく昔の言語なんか覚えてるなと思いました。Prologなんて大学の授業でやったくらいで、当時はプログラムも少しかけましたが、今となっては忘却の彼方。文法すら覚えていません。 記憶力がないのか、数年使っていない言語は昔よく使っていても文法すら全く覚えていないことがあります。昔使っていたけど、今は全く使っていない言語とかって今でも覚えていてすぐプログラムかけますか?言語は問いません。本を見て何日か勉強すればわかるようにはなると思いますが、その場で書いてとか言われてできますか?

  • アルゴリズムについて

    今、c言語のアルゴリズムの勉強をしています。 入門書が3、4冊を読みました。c言語によるアルゴリズム辞典っていう本を見たら、ほんの少ししかならないです。 将来、プログラマになりたいです。アルゴリズムがプログラマにとって非常に重要ですので。そこで今プログラムの仕事をしている方に聞きたいです。アルゴリズムってどの程度勉強したらいいですか?入門書の場合は、精精木構造までですね。

  • アルゴリズム いい本

    こんにちは、 プログラムのアルゴリズムについて勉強したいのですが、何かいい本はないでしょうか? プログラム言語に拠らない、基本的な考え方をマスターできればと考えています。 よろしくお願いします。

  • 勉強の方法!

    今年の4月からシステム会社のプログラマとして就職が 決まっているのですが、ほとんどプログラムの知識が ありません。 言語は、C言語を勉強しているのですが、 本やホームページを見て勉強するだけで いいのでしょうか? 効率がいい勉強方などがあったら教えてください。 時間はありますのでアルゴリズム等もしっかりと 覚えたいと思っています。 又は、他の言語でおすすめがあったら、教えてください。

  • クロスワードパズルを解くプログラムについて。

    学校の授業で独学でプログラミングを学ぶ授業があり、 現在授業の一環としてSWI-prologを学んでいます。 そこで、prologを用いて キー無しのクロスワードパズルを解くプログラムを組むことになりました。 キー無しのクロスワードパズルとは、 単語群から空白に文字数の合う単語を入れて埋めていくパズルです。 今回は英単語でやろうとしています。 自力でやってみようと思ったのですが、全く手が付けられず、 先生にアドバイスをいただきましたが、自分の理解力不足なのかよくわかりませんでした。 先生がおっしゃっていたことは ・prologの辞書を用いる ・1次元配列でつくる といったようなものでしたが、よくわかりません。 自分で本を購入し、自分なりに噛み砕きながらやってみましたができませんでした。 辞書はどこからか入手するのでしょうか。 また、1次元配列をprolog上でどうやって書けばいいのでしょうか。 C言語で配列はやっているので概念はわかっています。 そして、クロスワードパズルを解くプログラムを教えていただけないでしょうか。 文章が長くなり、申し訳ありません。 よろしくお願い致します。

  • 著作権保護の対象について

    ソースプログラムとオブジェクトプログラムは著作権保護の対象になるようですが、プログラム言語やアルゴリズムは保護の対象外であるのはなぜでしょうか?なぜ違いが出るのか教えてください。

  • アルゴリズムとは何なのでしょうか?

    学校でアルゴリズムを習っているのですが、 アルゴリズムとは何なのでしょうか? 教科書として、 「新・明解 C言語によるアルゴリズムとデータ構造」という本を買ったのですが、 内容的には以前C言語を勉強するために読んだC言語の勉強本とあまり変わらないような気がします。 スタックやキュー、ソートに検索など確かにC言語を教わる本には書いてないことはありましたが、 要するにC言語の別の面ということだと思いました。 意味的にはアルゴリズムは数学でいう計算方法、 つまり答えを求めるための色々な方法というように考えたのですが、 実際アルゴリズムとはどのようなものと理解すればいいのでしょうか?

  • プログラム作成に勝るもの無し?

    いつもお世話になっております。 C初心者で、勉強中のものです。ポインタと配列を今一つ自分の物に出来ないので集中的にやっています。 質問なのですが、ポイント的に(例 ポインタの理解)勉強している自分ですが、あまり自作プログラムを作っていません、よく言語を覚えるのに1番は自分でプログラムを つくってみる事といわれます。確かに自作プログラムを 作り終わり動かして楽しいのですが、実際覚えた部分以外 の事もしているので、効果的とはいえないような気がします。ならばアルゴリズムの勉強など、コーディング以外の 事を平行して勉強したほうがいいのではないかと思うの ですが、実際どうでしょうか?

  • GUIを作るために次にする事は?

    独学でC言語を学んでいます。 現在、アルゴリズムについて勉強しています。 アルゴリズムを習得したら、GUIのプログラムを作りたいと思うのですが、まずどのような事からはじめればいいのでしょうか? プログラムのサイトを見ると、SDKとかC++とかいろいろあって、どれをするべきなのか、まったく分かりません。 また、「この本で習得できたよ」みたいな本がありましたら、紹介していただけませんか? 分かる方、よろしくお願いします。

  • ソフトウェア作成への勉強方法

    文系の大学生なのですが、 大学入学後にパソコンに興味を持ち現在独学でプログラミングを勉強しています。 目標はゲームや色んなフリーウェアを作れるようになりたいです。 言語はC言語を勉強していて柴田望洋さんや林晴比古さんの本を読み 一通り基本的な文法やアルゴリズムは覚えました。 しかし数値のソートやデータ構造なんかを覚えたのは良いのですが、 実際に自分が普段使っているようなソフトウェアを作るのにどう結びつけたら良いのかよく分かりません。 特にGUIプログラム作成に関しては全く作り方が分かりません。 そこで今の状況から実際にソフトウェアを作れるようになるにはどういう勉強をしたら良いのか、 どういう本を読んだら良いのかということを教えて頂きたいです。お願いします。

専門家に質問してみよう