著作一覧 |
しょえー。
ピカピカのぎろちょんが着々と復刊への道を歩み出している雰囲気。
ネタにしてすみません。「型」が抜けてたから良からぬイメージが湧き出したってのは多分、当たりでしょう。でも、書き間違えてたってのは気づきませんでした。(一瞬、目がくらくらして一応グーグルかけたら哲学の他にPrologなんてのも見えたのでそういう言い方もあるんだな、と思ってしまった。というか堂々の1位ですよ)
その話はおいておいて、『関数言語』というのは用語として定着している/存在している呼び方なんでしょうか? なんでそんなことを訊くかというと、以前(って言っても10年というような単位)Cのことを関数(型)?言語と書いてあったのを見た覚えがあって、それがずっと気になっているからです。もちろん、Cは関数型言語ではないので「型」があるわけはないですが、かといって関数言語という呼び方を他に見た事がなかったからですが(見ないということと無いということは違うわけだし)。
というわけで、関数言語というクラスを持たない手続き型言語の呼び方について言及されている機会を見逃さずに食らいついたわけですが、よろしければ教えていただけないでしょうか?
ジェズイットを見習え |
私もCを「関数(型)言語」と聞いた世代ですが何故当時そのような呼び方をしたのでしょうかね。<br>と古い書籍等を調べてみたら「コンピュータに実行してもらう命令はすべて関数の中に記述されている」「関数がプログラムの実行単位」等と書いてあるものがありました。voidを含めて全て戻り値があるfunctionでプログラムが構成されているからでしょうかね。
大昔のBASIC等は、引数や戻り値を持った関数を作ることができませんでした。あってせいぜいGOSUB/RETURNでした。すなわち、コードのスタックはあるけど、データのスタックがない状態でした。そこに登場したCは、やっぱり関数言語と言えるのではないでしょうか。
C言語だけでひたすら関数主体でプログラミングすることもできなくはないですよね。Haskellのホームページを見ると"A Purely Functional Language"と書いてあるから、Cは"Non-Purely Functional Language"?
なるほど、他ならぬBASIC等との比較において「関数言語」と呼んだというのはそれっぽいですね。
私も「C=関数型」という記述を見て違和感を持った記憶があります。10年以上前の解説記事だったような(うろ覚え)。思うに,ある人が,解説記事の中でたくさんの言語を分類する図を作ったさい,プログラムのすべての構成要素がfunctionであるCを,つい関数型と誤って分類してしまい,それが引用されていったものではないかと。C言語や関数型言語(Wikipediaの定義では「ラムダ計算の概念をプログラミング言語として体現したもの。」)を真剣に考えた結果ではなくて,たくさんの言語をえいやで分類しちゃった結果だと認識しています。
hoshiさんが読んだのと同じようなのを読んだのかな。<br>確かにCにプロシージャの記述方法は無いですね。<br>個人的にはCOBOL70を含めて構造を記述できる(gotoが無くても問題ない)言語は構造化言語と呼ぶのが1番しっくり来る気がします。それとFORTRANなんかを合わせて「手続き型言語」と呼んで、関数型言語、論理型言語と並べるというのが良いのかな?
自分の手元に今無いんで確認できなくて申し訳ないんですが,<br>どなたかこの本の<br>http://www.hir-net.com/book/book19/<br>「関数型言語」の項を確認していただけませんでしょうか?
その3種を並べるのが妥当だと思います。>arton<br><br>ラフにまとめるとこんな感じかな?<br><br>●手続き型言語(FORTRANが元祖)<br> ⊃ 構造化言語(ALGOLが元祖。Pascalが典型。C言語も含む)<br> ⊃ 構造化言語を拡張したオブジェクト指向言語<br> (Simulaが元祖。Smalltalkが典型。Javaも含む)<br>●関数型言語(Lispの一族)<br>●論理型言語(Prologの一族)<br><br>そういえば,昔読んだ記事で違和感を持ったのはLispとCを両方とも「関数型」に分類してあったからでした。どう考えても変ですよね。