アカウント名:
パスワード:
そもそも、Cは構造化プログラミング、関数型言語だと認識しています。
C++はそれらCの構造化プログラミングや関数型言語を「実装記述に用いる」オブジェクト指向言語だと思っています。つまり、オブジェクト指向とは構造化プログラミングや関数型言語の上位概念に位置するものです。
オブジェクト指向とは何か、良く分かっていない人のコメントが散見されますが、いちどこの本を読んで、概念とその実装の違いをきちんと学んだ方が良いのではないでしょうか?
「憂鬱なプログラマのためのオブジェクト指向開発講座―C++による実践的ソフトウェア構築入門 (DDJ Selection) (単行本)」http://www.amazon.co.jp/%E6%86%82%E9%AC%B1%E3%81%AA%E3%83%97%E3%83%AD%... [amazon.co.jp]
読んだことないけど、その本もしかして憂鬱なプログラマになるための本?
Meyer本はいいよね。Eiffelのコードがその本の中でしかまずお目にかかれないとしても。
>>「憂鬱なプログラマのためのオブジェクト指向開発講座―C++による実践的ソフトウェア構築入門 (DDJ Selection) (単行本)」>この本を絶賛してるプログラマーが多いけど、そいつらって本当にわかってんのか疑問符が付くことが多かったな。
全く本当にそう思います。あの本は90年代を代表する有名な超ダメ本ですよ。http://d.hatena.ne.jp/minekoa/20080503/1209799681 [hatena.ne.jp]
>>読んだことないけど、その本もしかして憂鬱なプログラマになるための本?一緒に仕事をするプログラマを憂鬱にさせるための本かも。
アレを良いと言うような人は、C++プログラマを名乗っちゃいかんと思う。いっそプログラマを廃業した方がいいくらいです。
\(^O^)/の人 [asahi-net.or.jp]が今は亡きDDJ日本版の連載コラムであの本を推薦してましたな。まあ元がDDJ連載記事だからってこともあるんでしょうけど。俺もその書評を真に受けて購入しましたが、結果は人生オワタ\(^o^)/
あれはあれで悪くない本だと思いますよ。
ところで、Javaが「でていた」といわれても、Javaが「主流になるかどうか判らなかった」時期の本だからなあ。なにせUMLすらまだ(以下同文)という時期の本なんだから。
というかこの本を2008年でゲット可能だったという点が意外。
>OOPLを使うもっとも大きな福音は「呼び出し元の共通化」が出来るようになったことだと私は考えます。
こんなの、OOに限らずどの方法論でもそれなりに出てくる概念だろうに…SmalltalkerはSmalltalkerで偏った意見を言うことが有るんで要注意。
IT畑ではOOに限らず大抵の方法論が「昔からあるがマイナーだっただけ
あれって当時は「プログラマにOOPを分かった気にさせる」とても有用な本だったんですよ。
当時大学生で割と時間をもてあましていたので図書館で何十冊とオブジェクト指向と題する本を読み漁りましたけど、とにかく酷かった。
大体が「魚」ってオブジェクトがあれば「アジ」も「サバ」も同じように取り扱えるよね、とか「車」ってオブジェクトは「車体」や「タイヤ」や「エンジン」ってオブジェクトで構成すれば「エンジン」だけを取り替えるのとか楽になるよね、とか抽象論ばっかりでプログラムに落とすにはどうするかってのはさっぱり書いてない本ばかりだった。
上の例はまだましな方で
>同年代に出版されている本でちゃんとした物があったことを示した上でないと「オブジェクト指向入門」Bertrand Meyer、アスキー (1990/11)http://www.amazon.co.jp/dp/4756100503/ [amazon.co.jp]
「オブジェクト指向プログラミング入門」ティモシイ・A. バッド (著)、トッパン (1992/10)http://www.amazon.co.jp/dp/4810180484/ [amazon.co.jp]
「デザインパターン」GoF、ソフトバンククリエイティブ (1995/10)http://www.amazon.co.jp/dp/4890527974/ [amazon.co.jp]
>「90年代を代表する有名な超ダメ本」と評するのは「憂鬱なプログラマのためのオブジェクト指向開発講座」、翔泳社 (1998/05)http://www.amazon.co.jp/dp/4881356194/ [amazon.co.jp]
これでは弁護する余地はないかと。
アマゾンでの評価は高いね。http://www.amazon.co.jp/dp/4881356194/ [amazon.co.jp]星5つ: (21)星4つ: (5)星3つ: (3)星2つ: (1)星1つ: (1)
全然知らなくて、こんなに評価が高いと買って信じてしまいそうだ。
あきらめろ。
憂鬱本の受け売り話を(憂鬱本の名前は出さず少々焼きなおして)スラドJに書いたらすば洞が軽く3つくらい獲得できる。それが現実だ。
#モデレータのスキル表をチェックしないと、モデを信じるに値するかどうかは微妙。それがスラド。
ところでOOではいわゆる動物話に拒否反応を示す人が多いが、あれ自体は嘘言ってるわけでもなんでもないだろう。問題は読者に、動物話をOOの話に「読みかえる能力」が有るかどうかだ。そしてそれは初心者かどうかあまり関係なくて、(たとえば継承という概念に)すんなり入れる人かどうかで、違ってくる。
Web MVC2のような似非OOPが流行するのを見るに、動物話をやめたところで結局は非スンナリな人にもうまくOOを教えることに成功なぞしていないということだと見た。
動物話は
http://d.hatena.ne.jp/minekoa/20090510/1241957810 [hatena.ne.jp]
の[その72]で面白いこと書いてる。
系統樹のような継承は差分プログラミングでしかなくって、むしろ収斂進化がポリモフィズムの例に値するとかなんとか。
というかOOPの継承はもともとむちゃくちゃ。「これで一体なにが言いたいの?」と。発明したやつ出てこい。
便利なところに少々使うノミにするに限る。
いやいや、Cは「関数型言語」じゃないです。 http://ja.wikipedia.org/wiki/%E9%96%A2%E6%95%B0%E5%9E%8B%E8%A8%80%E8%AA%9E [wikipedia.org]
人に本を読ませる前に、自分に読むべき本があるのでは。
そうですね、古典的なBASICやCOBOL-60やFORTRAN 66で構造化プログラミングすることだって可能です。ただ、少し構造化プログラミングに向いてない言語なので、実装が面倒なだけです。アセンブリ言語でオブジェクト指向プログラミングすることだって可能です。ただ、少しオブジェクト指向に向いてない言語なので、実装が面倒なだけです。Brainfuckでオブジェクト指向プログラミングすることだって可能です。ただ、少しオブジェクト指向に向いてない言語なので、実装が面倒なだけです。
言語の向き不向きを無視して「実装が面倒なだけ」で済ませて思考停止してたら、チューリング完全な言語はどれも等価で違いなどないという結論になります。
GTK(C版) とか見てると、そのちょっと向いてないところをがんばってやってるのがかわいいとか思うようになります。
なんでこんな馬鹿げた例を挙げるんだろう。
> Brainfuckでオブジェクト指向プログラミングすることだって可能です。ただ、少しオブジェクト指向に向いてない言語なので、実装が面倒なだけです。
Brainfuckでオブジェクト指向プログラミングは可能ですが、極めて困難ですので、アセンブリ言語までがオブジェクト指向言語ということになります。
> 言語の向き不向きを無視して「実装が面倒なだけ」で済ませて思考停止してたら、
同じ穴の狢ですよ。元コメの論理を敷衍すると非常識な結論になったのは、あなたが非常識な例を挙げたからです。相手に罪はありません。
> そもそも、Cは構造化プログラミング、関数型言語だと認識しています。
C が関数型言語とは初めて知った。ずっと手続き型言語だと思ってました。すると、LISP や R は何言語?
オブジェクトの設計に構造化は外せない概念だと思いますが、上位概念なの?関数型言語から見たら、オブジェクト指向は退化になっちゃうと思うんですけどそのへんどうなんでしょう。
教えて! えろい人!
こらこら、Lispは関数型だが、Rは手続き型言語だぞ。あと、関数型言語とオブジェクト指向は直交概念だから、退化などと比較することが無意味。
> こらこら、Lispは関数型だが、Rは手続き型言語だぞ。ありゃ。そうだったっけ。こりゃ失礼。
> あと、関数型言語とオブジェクト指向は直交概念だから、退化などと比較することが無意味。ふむふむ。そういえば O'Haskell [wikipedia.org]なんてものがあるんですね。勉強になります。
> こらこら、Lispは関数型だが、Rは手続き型言語だぞ。
俺、Lisp(含むScheme)はどうしても関数型言語だとは思えないんだよな。 http://nels.nii.ac.jp/els/110002763020.pdf?id=ART0003058569&type=p... [nii.ac.jp] カリー化もできないし。
> あと、関数型言語とオブジェクト指向は直交概念だから、退化などと比較することが無意味。
オブジェクト指向を広く捉
俺、Lisp(含むScheme)はどうしても関数型言語だとは思えないんだよな。 http://nels.nii.ac.jp/els/110002763020.pdf?id=ART0003058569&type=p... [nii.ac.jp]
意図されたリンク先は松田裕幸『Scheme: 抽象化能力をもつ goto-less 手続き型言語』 (1994 年) [nii.ac.jp] ですね。これって、 Scheme が関数型言語でないという意味で「手続き型言語」と呼んでいるのでしょうか。本文中で「Scheme においては基本的には関数型プログラミングによるコーディングが期待されている」 (2.6 節先頭の段落) と書かれている通りで、それなら (純粋でない) 関数型言語と呼んで差し支えないのではないかと思うのですが。
カリー化もできないし。
例えば Scheme なら
(define (curry f) (lambda (x) (lambda (y) (f x y))))
とか書けばできますね、という話ではないと思うのでそこは措いて、たぶん関数が二つ以上の引数を取ることを問題にしているのだと思いますが、それってそんなに関数型プログラミングにおいて不便でしょうか。
Haskell などではカリー化された 2 引数の関数を map 関数に渡すときに部分適用と flip 関数を使って
map (f x) ys
map ((flip f) y) xs
のように書けて多少綺麗という気はしますが、それも引数が多くなると部分適用だけで済む場合以外はあまり綺麗でなくなって結局
map (\x -> f x y z) xs
という書き方をしたくなりますし、それならカリー化されていなくても大差ないような気がしてしまいます。
Scheme も Haskell も最近ほとんど使っていないので、僕の感覚がずれているかもしれませんが。
「関数型言語」というのは式の解釈(Evaluation,Reduction)によって演算が行われる言語を指します。対になるのは状態を変化させる言語である「手続き型言語」です。C は手続き型言語です。
関数を書くから「関数型言語」になるわけではありません。(以下、C言語の関数を関数と呼ぶべきではないという話に向かっていくので略)--昔、「Prolog って C に似ているね~。関数で記述するから」というとんでもないことを言ってProlog が専門の先生を唖然とさせたことがあるので AC
> 「プロシージャしかない言語ではない」という意味で、C言語を関数型言語を呼ぶことがあった(らしい)。
それは謎ですね。一般に手続き(プロシージャ)と呼ばれるものを C ではなぜか関数(ファンクション)と呼んでいるだけなのに。むしろ、戻り値を持つプロシージャと持たないプロシージャを文法上 function とprocedure として区別する言語に比べたら C はプロシージャが 1 種類しかない言語ですよ。
昔、月刊ASCII に「C言語は関数型」と書いた文章に各方面からつっこみを受けた方が、苦し紛れに述べた言いわけかと思いました。
昔どころか、今でも「C言語は関数型の言語 [nikkeibp.co.jp]」とか言って商業記事を書いちゃってる人がいますよ、困ったことに。
書いちゃってますね。Web 記事って、内容についての校正やらないんですかねえ。
Cのどこが関数型言語なのか是非教えて下さい。
こういうの? [hatena.ne.jp]
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike
オブジェクト指向と構造化プログラミング (スコア:1)
そもそも、Cは構造化プログラミング、関数型言語だと認識しています。
C++はそれらCの構造化プログラミングや関数型言語を「実装記述に用いる」オブジェクト指向言語だと思っています。つまり、オブジェクト指向とは構造化プログラミングや関数型言語の上位概念に位置するものです。
オブジェクト指向とは何か、良く分かっていない人のコメントが散見されますが、いちどこの本を読んで、概念とその実装の違いをきちんと学んだ方が良いのではないでしょうか?
「憂鬱なプログラマのためのオブジェクト指向開発講座―C++による実践的ソフトウェア構築入門 (DDJ Selection) (単行本)」
http://www.amazon.co.jp/%E6%86%82%E9%AC%B1%E3%81%AA%E3%83%97%E3%83%AD%... [amazon.co.jp]
optimized for /.
憂鬱本はオブジェクト指向プログラミングの学習に適切か? (スコア:4, 参考になる)
この本を絶賛してるプログラマーが多いけど、そいつらって本当にわかってんのか疑問符が付くことが多かったな。
ここでもC言語を関数型言語と言っちゃう程度だし。
で、その憂鬱本なんだがオブジェクト指向プログラミングの勉強として不適当だと思う。
会社入って一年目のとき憂鬱本を読んだが「なぜオブジェクト指向プログラミングでなければならないのか」「オブジェクトって結局なんなのか」って疑問が解消されなかった。
結局得られたのは世間一般でなんとなく広まっているオブジェクト指向プログラミングがわかったような気になれる話だけ。
継承を使ったインタフェースやサブタイププログラミングとメッセージパッシングのごちゃまぜになったそれっぽい話ばっかりだけど、
そんな程度の知識や理解なんて憂鬱本である必要が無いよね。
オブジェクト指向プログラミングって何なのかって疑問が解消されずその後もちょこちょこ本や記事を読んだけど、
俺が最終的に満足できる解答は 「オブジェクト指向入門 バートランド・メイヤー (著), 酒匂 寛 (翻訳) 」を読んでやっと得ることが出来た。
これからC++やJavaでオブジェクト指向プログラミングを勉強したいって人は憂鬱本は辞めてオブジェクト指向入門を読むことを勧めるよ。
Re:憂鬱本はオブジェクト指向プログラミングの学習に適切か? (スコア:1)
読んだことないけど、その本もしかして憂鬱なプログラマになるための本?
Meyer本はいいよね。Eiffelのコードがその本の中でしかまずお目にかかれないとしても。
憂鬱本はオブジェクト指向プログラミングの学習に最も不適切(フレームの元:-0.001) (スコア:3, 参考になる)
>>「憂鬱なプログラマのためのオブジェクト指向開発講座―C++による実践的ソフトウェア構築入門 (DDJ Selection) (単行本)」
>この本を絶賛してるプログラマーが多いけど、そいつらって本当にわかってんのか疑問符が付くことが多かったな。
全く本当にそう思います。
あの本は90年代を代表する有名な超ダメ本ですよ。
http://d.hatena.ne.jp/minekoa/20080503/1209799681 [hatena.ne.jp]
>>読んだことないけど、その本もしかして憂鬱なプログラマになるための本?
一緒に仕事をするプログラマを憂鬱にさせるための本かも。
アレを良いと言うような人は、C++プログラマを名乗っちゃいかんと思う。
いっそプログラマを廃業した方がいいくらいです。
( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \ (スコア:2, 興味深い)
\(^O^)/の人 [asahi-net.or.jp]が今は亡きDDJ日本版の連載コラムであの本を推薦してましたな。
まあ元がDDJ連載記事だからってこともあるんでしょうけど。
俺もその書評を真に受けて購入しましたが、結果は人生オワタ\(^o^)/
Re: (スコア:0)
あれはあれで悪くない本だと思いますよ。
ところで、
Javaが「でていた」といわれても、
Javaが「主流になるかどうか判らなかった」時期の本だからなあ。
なにせUMLすらまだ(以下同文)という時期の本なんだから。
というかこの本を2008年でゲット可能だったという点が意外。
>OOPLを使うもっとも大きな福音は「呼び出し元の共通化」が出来るようになったことだと私は考えます。
こんなの、OOに限らずどの方法論でもそれなりに出てくる概念だろうに…
SmalltalkerはSmalltalkerで偏った意見を言うことが有るんで要注意。
IT畑ではOOに限らず大抵の方法論が「昔からあるがマイナーだっただけ
Re: (スコア:0)
あれって当時は「プログラマにOOPを分かった気にさせる」とても有用な本だったんですよ。
当時大学生で割と時間をもてあましていたので図書館で何十冊とオブジェクト指向と
題する本を読み漁りましたけど、とにかく酷かった。
大体が「魚」ってオブジェクトがあれば「アジ」も「サバ」も同じように取り扱えるよね、とか
「車」ってオブジェクトは「車体」や「タイヤ」や「エンジン」ってオブジェクトで構成すれば
「エンジン」だけを取り替えるのとか楽になるよね、とか抽象論ばっかりでプログラムに落とす
にはどうするかってのはさっぱり書いてない本ばかりだった。
上の例はまだましな方で
Re:憂鬱本はオブジェクト指向プログラミングの学習に最も不適切(フレームの元:-0.001) (スコア:2)
>同年代に出版されている本でちゃんとした物があったことを示した上でないと
「オブジェクト指向入門」Bertrand Meyer、アスキー (1990/11)
http://www.amazon.co.jp/dp/4756100503/ [amazon.co.jp]
「オブジェクト指向プログラミング入門」ティモシイ・A. バッド (著)、トッパン (1992/10)
http://www.amazon.co.jp/dp/4810180484/ [amazon.co.jp]
「デザインパターン」GoF、ソフトバンククリエイティブ (1995/10)
http://www.amazon.co.jp/dp/4890527974/ [amazon.co.jp]
>「90年代を代表する有名な超ダメ本」と評するのは
「憂鬱なプログラマのためのオブジェクト指向開発講座」、翔泳社 (1998/05)
http://www.amazon.co.jp/dp/4881356194/ [amazon.co.jp]
これでは弁護する余地はないかと。
アマゾンでの評価は高いので危険 (スコア:0)
アマゾンでの評価は高いね。
http://www.amazon.co.jp/dp/4881356194/ [amazon.co.jp]
星5つ: (21)
星4つ: (5)
星3つ: (3)
星2つ: (1)
星1つ: (1)
全然知らなくて、こんなに評価が高いと買って信じてしまいそうだ。
Re: (スコア:0)
あきらめろ。
憂鬱本の受け売り話を(憂鬱本の名前は出さず少々焼きなおして)スラドJに書いたら
すば洞が軽く3つくらい獲得できる。
それが現実だ。
#モデレータのスキル表をチェックしないと、モデを信じるに値するかどうかは微妙。それがスラド。
ところでOOではいわゆる動物話に拒否反応を示す人が多いが、
あれ自体は嘘言ってるわけでもなんでもないだろう。
問題は読者に、動物話をOOの話に「読みかえる能力」が有るかどうかだ。
そしてそれは初心者かどうかあまり関係なくて、
(たとえば継承という概念に)すんなり入れる人かどうかで、違ってくる。
Web MVC2のような似非OOPが流行するのを見るに、
動物話をやめたところで結局は
非スンナリな人にもうまくOOを教えることに成功なぞしていない
ということだと見た。
Re: (スコア:0)
動物話は
http://d.hatena.ne.jp/minekoa/20090510/1241957810 [hatena.ne.jp]
の[その72]で面白いこと書いてる。
系統樹のような継承は差分プログラミングでしかなくって、むしろ収斂進化がポリモフィズムの例に値するとかなんとか。
Re: (スコア:0)
Re: (スコア:0)
というかOOPの継承はもともとむちゃくちゃ。
「これで一体なにが言いたいの?」と。
発明したやつ出てこい。
便利なところに少々使うノミにするに限る。
Re:オブジェクト指向と構造化プログラミング (スコア:3, すばらしい洞察)
いやいや、Cは「関数型言語」じゃないです。
http://ja.wikipedia.org/wiki/%E9%96%A2%E6%95%B0%E5%9E%8B%E8%A8%80%E8%AA%9E [wikipedia.org]
人に本を読ませる前に、自分に読むべき本があるのでは。
Re:オブジェクト指向と構造化プログラミング (スコア:2)
Cでオブジェクト指向することだって可能です。ただ、少しオブジェクト指向に向いてない言語なので、実装が面倒なだけです。
Re: (スコア:0)
そうですね、古典的なBASICやCOBOL-60やFORTRAN 66で構造化プログラミングすることだって可能です。ただ、少し構造化プログラミングに向いてない言語なので、実装が面倒なだけです。
アセンブリ言語でオブジェクト指向プログラミングすることだって可能です。ただ、少しオブジェクト指向に向いてない言語なので、実装が面倒なだけです。
Brainfuckでオブジェクト指向プログラミングすることだって可能です。ただ、少しオブジェクト指向に向いてない言語なので、実装が面倒なだけです。
言語の向き不向きを無視して「実装が面倒なだけ」で済ませて思考停止してたら、チューリング完全な言語はどれも等価で違いなどないという結論になります。
Re:オブジェクト指向と構造化プログラミング (スコア:1)
GTK(C版) とか見てると、そのちょっと向いてないところをがんばってやってるのがかわいいとか思うようになります。
Re: (スコア:0)
なんでこんな馬鹿げた例を挙げるんだろう。
> Brainfuckでオブジェクト指向プログラミングすることだって可能です。ただ、少しオブジェクト指向に向いてない言語なので、実装が面倒なだけです。
Brainfuckでオブジェクト指向プログラミングは可能ですが、極めて困難ですので、
アセンブリ言語までがオブジェクト指向言語ということになります。
> 言語の向き不向きを無視して「実装が面倒なだけ」で済ませて思考停止してたら、
同じ穴の狢ですよ。
元コメの論理を敷衍すると非常識な結論になったのは、あなたが非常識な例を挙げたからです。相手に罪はありません。
Re:オブジェクト指向と構造化プログラミング (スコア:1)
> そもそも、Cは構造化プログラミング、関数型言語だと認識しています。
C が関数型言語とは初めて知った。ずっと手続き型言語だと思ってました。
すると、LISP や R は何言語?
オブジェクトの設計に構造化は外せない概念だと思いますが、上位概念なの?
関数型言語から見たら、オブジェクト指向は退化になっちゃうと思うんですけど
そのへんどうなんでしょう。
教えて! えろい人!
Re: (スコア:0)
こらこら、Lispは関数型だが、Rは手続き型言語だぞ。
あと、関数型言語とオブジェクト指向は直交概念だから、退化などと比較することが無意味。
Re:オブジェクト指向と構造化プログラミング (スコア:1)
> こらこら、Lispは関数型だが、Rは手続き型言語だぞ。
ありゃ。そうだったっけ。こりゃ失礼。
> あと、関数型言語とオブジェクト指向は直交概念だから、退化などと比較することが無意味。
ふむふむ。そういえば O'Haskell [wikipedia.org]なんてものがあるんですね。勉強になります。
Re: (スコア:0)
> こらこら、Lispは関数型だが、Rは手続き型言語だぞ。
俺、Lisp(含むScheme)はどうしても関数型言語だとは思えないんだよな。
http://nels.nii.ac.jp/els/110002763020.pdf?id=ART0003058569&type=p... [nii.ac.jp]
カリー化もできないし。
> あと、関数型言語とオブジェクト指向は直交概念だから、退化などと比較することが無意味。
オブジェクト指向を広く捉
Re:オブジェクト指向と構造化プログラミング (スコア:2)
意図されたリンク先は松田裕幸『Scheme: 抽象化能力をもつ goto-less 手続き型言語』 (1994 年) [nii.ac.jp] ですね。これって、 Scheme が関数型言語でないという意味で「手続き型言語」と呼んでいるのでしょうか。本文中で「Scheme においては基本的には関数型プログラミングによるコーディングが期待されている」 (2.6 節先頭の段落) と書かれている通りで、それなら (純粋でない) 関数型言語と呼んで差し支えないのではないかと思うのですが。
例えば Scheme なら
とか書けばできますね、という話ではないと思うのでそこは措いて、たぶん関数が二つ以上の引数を取ることを問題にしているのだと思いますが、それってそんなに関数型プログラミングにおいて不便でしょうか。
Haskell などではカリー化された 2 引数の関数を map 関数に渡すときに部分適用と flip 関数を使って
のように書けて多少綺麗という気はしますが、それも引数が多くなると部分適用だけで済む場合以外はあまり綺麗でなくなって結局
という書き方をしたくなりますし、それならカリー化されていなくても大差ないような気がしてしまいます。
Scheme も Haskell も最近ほとんど使っていないので、僕の感覚がずれているかもしれませんが。
Re: (スコア:0)
どういうのが関数型ぽいと思うかというと、例えばこんなの。
http://www.sampou.org/haskell/article/whyfp.html
Cが関数型言語? (スコア:1, 興味深い)
「関数型言語」というのは式の解釈(Evaluation,Reduction)によって演算が行われる言語を指します。
対になるのは状態を変化させる言語である「手続き型言語」です。
C は手続き型言語です。
関数を書くから「関数型言語」になるわけではありません。
(以下、C言語の関数を関数と呼ぶべきではないという話に向かっていくので略)
--
昔、「Prolog って C に似ているね~。関数で記述するから」というとんでもないことを言って
Prolog が専門の先生を唖然とさせたことがあるので AC
Re: (スコア:0)
手続き型言語は命令型言語の一種で,一連の命令を手続きという単位でまとめる機能を持った言語のことだと思う.
Re: (スコア:0)
Re: (スコア:0)
> 「プロシージャしかない言語ではない」という意味で、C言語を関数型言語を呼ぶことがあった(らしい)。
それは謎ですね。
一般に手続き(プロシージャ)と呼ばれるものを C ではなぜか関数(ファンクション)と呼んでいるだけなのに。
むしろ、戻り値を持つプロシージャと持たないプロシージャを文法上 function とprocedure として区別する言語に比べたら C はプロシージャが 1 種類しかない言語ですよ。
Re: (スコア:0)
> 「プロシージャしかない言語ではない」という意味で、C言語を関数型言語を呼ぶことがあった(らしい)。
昔、月刊ASCII に「C言語は関数型」と書いた文章に各方面からつっこみを受けた方が、苦し紛れに述べた言いわけかと思いました。
Re: (スコア:0)
昔どころか、今でも「C言語は関数型の言語 [nikkeibp.co.jp]」とか言って
商業記事を書いちゃってる人がいますよ、困ったことに。
Re:Cが関数型言語? (スコア:1)
書いちゃってますね。
Web 記事って、内容についての校正やらないんですかねえ。
Re: (スコア:0)
Cのどこが関数型言語なのか是非教えて下さい。
Re: (スコア:0)
Re:オブジェクト指向と構造化プログラミング (スコア:1)
こういうの? [hatena.ne.jp]
1を聞いて0を知れ!