アカウント名:
パスワード:
そもそも、Cは構造化プログラミング、関数型言語だと認識しています。
C++はそれらCの構造化プログラミングや関数型言語を「実装記述に用いる」オブジェクト指向言語だと思っています。つまり、オブジェクト指向とは構造化プログラミングや関数型言語の上位概念に位置するものです。
オブジェクト指向とは何か、良く分かっていない人のコメントが散見されますが、いちどこの本を読んで、概念とその実装の違いをきちんと学んだ方が良いのではないでしょうか?
「憂鬱なプログラマのためのオブジェクト指向開発講座―C++による実践的ソフトウェア構築入門 (DDJ Selection) (単行本)」
> そもそも、Cは構造化プログラミング、関数型言語だと認識しています。
C が関数型言語とは初めて知った。ずっと手続き型言語だと思ってました。すると、LISP や R は何言語?
オブジェクトの設計に構造化は外せない概念だと思いますが、上位概念なの?関数型言語から見たら、オブジェクト指向は退化になっちゃうと思うんですけどそのへんどうなんでしょう。
教えて! えろい人!
こらこら、Lispは関数型だが、Rは手続き型言語だぞ。あと、関数型言語とオブジェクト指向は直交概念だから、退化などと比較することが無意味。
> こらこら、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 も最近ほとんど使っていないので、僕の感覚がずれているかもしれませんが。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
犯人は巨人ファンでA型で眼鏡をかけている -- あるハッカー
オブジェクト指向と構造化プログラミング (スコア:1)
そもそも、Cは構造化プログラミング、関数型言語だと認識しています。
C++はそれらCの構造化プログラミングや関数型言語を「実装記述に用いる」オブジェクト指向言語だと思っています。つまり、オブジェクト指向とは構造化プログラミングや関数型言語の上位概念に位置するものです。
オブジェクト指向とは何か、良く分かっていない人のコメントが散見されますが、いちどこの本を読んで、概念とその実装の違いをきちんと学んだ方が良いのではないでしょうか?
「憂鬱なプログラマのためのオブジェクト指向開発講座―C++による実践的ソフトウェア構築入門 (DDJ Selection) (単行本)」
optimized for /.
Re: (スコア:1)
> そもそも、Cは構造化プログラミング、関数型言語だと認識しています。
C が関数型言語とは初めて知った。ずっと手続き型言語だと思ってました。
すると、LISP や R は何言語?
オブジェクトの設計に構造化は外せない概念だと思いますが、上位概念なの?
関数型言語から見たら、オブジェクト指向は退化になっちゃうと思うんですけど
そのへんどうなんでしょう。
教えて! えろい人!
Re: (スコア:0)
こらこら、Lispは関数型だが、Rは手続き型言語だぞ。
あと、関数型言語とオブジェクト指向は直交概念だから、退化などと比較することが無意味。
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 も最近ほとんど使っていないので、僕の感覚がずれているかもしれませんが。