回答編集履歴

1

関数型プログラミングについて追記

2018/01/28 14:24

投稿

raccy
raccy

スコア21737

test CHANGED
@@ -171,3 +171,37 @@
171
171
 
172
172
 
173
173
  上記以外に関数を引数に取る関数(`std::sort()`等)に対して、その場で引数にする関数を書けるという利点がありますが、ちょっと便利になる程度のおまけ程度の機能だと私は思っています。
174
+
175
+
176
+
177
+ ---
178
+
179
+
180
+
181
+ 【追記:ラムダ式と関数型プログラミングとの関係】
182
+
183
+
184
+
185
+ 関数型プログラミングとはプログラミングにおける考え方(コードの組み立て方)の一つです。ただの考え方なので、言語仕様に強く依存するわけではありません。最低限、関数が第一級オブジェクトにできる(または擬似的にできる)のであれば、どのような言語でもほとんど取り入れることが出来ると考えられています。しかし、関数型プログラミングがしやすいかしにくいかは別の話です。
186
+
187
+
188
+
189
+ ラムダ式は関数型プログラミングにおいて必須であるというわけでは無く、無いと不便で仕方が無いという程度のものです。関数型プログラミングはさまざまな手法の寄り集まりではありますが、クロージャーを備えたラムダ式を使うことを前提としている手法も多くあります(上のラムダ式のコードはその一例です)。擬似的なラムダ式で実現することも不可能ではないですが、大変面倒で冗長な処理になってしまうことでしょう。つまり、C++で関数型プログラミングを行う場合、ラムダ式は、必須とは言えないまでも、無い場合は酷く冗長でわかりにくいコードになってしまうと言うことです。
190
+
191
+
192
+
193
+ では、関数型プログラミングとは何か?どうしてもそう言えるのか?を説明しようとすると、ちょっと感覚的なこともあるので、関数型プログラミングそのものを知らないと言葉で説明するのは難しいです。Haskellのような本物の関数型言語を一度やってみるといいかもしれません。
194
+
195
+
196
+
197
+ ついでに、ラムダ式がなかったC++11より前のC++03時代はどうだったのかというと、boostを使って頑張っている記事を見つけたので、紹介しておきます。
198
+
199
+
200
+
201
+ [関数型言語 C++ - 兼雑記](http://shinh.hatenablog.com/entry/20061124/1164309160)
202
+
203
+ [C++ で SICP - memologue](http://d.hatena.ne.jp/yupo5656/20061123/p1)
204
+
205
+
206
+
207
+ ※ 2006年の記事ですので、C++11以降では全く事情が異なることに注意してください。