学习函数式编程以改进 C++11 风格.哈斯克尔,Lisp,或者



我从来没有用"纯"函数式语言编程过。我在 C 和 C++ 上获得了我的条纹,尝试了 Java、C#、PHP 等......但我总是发现自己回到了C++。也许我有点受虐狂,但我喜欢低级的东西。

我还发现,通过嵌入LUA,Python或其他脚本语言(以及它们对快速开发的关注),我可以快速完成快速开发。

长话短说,我不会退出C/C++所以不要说服我放弃它。然而,我几乎没有时间学习C++11,我开始感觉到未来函数式编程曲线的加速。

我的问题是双重的。C++11 的 lambda 功能概念是从哪种语言"借用"的,如果不是那种语言,哪种语言是理想的语言,或者如果有的话,可以了解使用 C++11 的新 lambda 功能的"方式"(没有双关语)。

PS:老实说,我对C++中新的"臃肿"添加不太满意。我喜欢C++它的样子,它开始感觉语言变得臃肿。我不会把这当作事实;我听说你必须体验过一种函数式语言才能"理解它"。

老实说,镇上似乎有一个新的重量级人物。首先只是"程序化"编程,然后是OOP范式的转变,而现在似乎事情正在朝着"功能"做事的方式发展。

当然,过程编程仍然活跃并且很好(在类内),我不得不想知道lambda方法将在哪里适合(正确使用)类/oop设计。它只是程序部分的替代品吗?让 OOP 成为过去 (pfft)?还是完全是其他东西(例如,为封装过程代码的对象生成事件的功能事件系统)?

我会尽量减少你的意见,直到你对所涉及的问题有更严格的经验。

套用Bjarne Stroustrup的话:在过去的几十年里,函数式编程在学术界有很多广播时间,但在工业中部署的函数式系统的数量仍然为零。

更具体地说,lambda 只是声明单例函子对象(具有 operator() 函数的类)的一种简写语法方法,该对象从其封闭作用域捕获变量作为成员变量。 我不认为它是一个"函数式编程"的概念,比C++中的任何其他实体都要多。

函数

式编程通常涉及不可变的数据类型(一旦构造就不会改变的对象)和纯函数(其输出完全依赖于其输入的函数,而不是其他任何内容)。

如果你对函数式编程感兴趣,现在有一门免费的在线课程(MOOC),叫做Scala中的函数式编程原理,这是瑞士顶尖大学之一对该主题的一个非常好的、备受推崇的介绍。

我不能在 C++11 中谈论 lambda,但我知道将 lambda 添加到 Java 8 的部分理由是启用开箱即用的透明并发支持。如何?它提供了一个(惰性)Stream接口,您只需调用parallelsequential即可在并行和顺序处理之间切换(这些方法返回新流,并且对现有流没有副作用)。

如果您查看 Stream 中的方法,您很快就会注意到,如果没有 lambda 工具,使用它们将非常痛苦。查看一些示例,说明您可以将流与 lambda 结合使用。

如果还没有这样的库,应该可以为 C++11 实现类似的库。

最新更新