《Clojure编程乐趣》—— 第1章,第1.3节函数式编程

简介:

本节书摘来自异步社区《Clojure编程乐趣》一书中的第1章,第1.3节函数式编程,作者 【美】Michael Fogus , Chris Houser,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.3 函数式编程
Clojure编程乐趣
快点回答,函数式编程是什么意思?错!
别太泄气,其实,我们也不知道确切的答案是什么。函数式编程只是诸多定义模糊的计算机术语1中的一个。如果找100个程序员问它的定义,我们会得到100个不同的答案。确实,某些答案是类似的,但如同雪花一般,没有两个答案是完全一样的。要进一步搅混水的话,让计算机科学的专家们单独给出定义,我们可能会发现,某些答案甚至是彼此矛盾的。同样,任何一个函数式编程定义的基本结构都可能会不同,这完全取决于回答问题的人喜欢用哪种语言写程序:Haskell、ML、Factor、Unlambda、Ruby、Qi等。随便一个人、一本书或是一门语言怎么就能声称自己是函数式编程的权威呢?然而,正如大多数各具特色的雪花都是由水组成的,各种说法的函数式编程核心都遵循着同样的核心原则。

1.3.1 一个可行的函数式编程定义
无论函数式编程定义用的是lambda演算、单子I/O(monadic I/O)、delegate还是java.lang. Runnable,基本的单元可能就是某种形式的过程、函数或是方法—这是根本。函数式编程关心和处理的是函数的应用和组合。再进一步,一门被认为是函数式的语言,它的函数概念一定是一等的。在这门语言里,函数可以存储、可以传递,还可以返回,同语言里的其他数据一样。各种不同的定义远远超出了这一核心概念,但是,谢天谢地,作为起点,这足够了。当然,我们还会进一步阐述一下Clojure风格的函数式编程,包括纯粹性、不变性、递归、惰性和引用透明等主题,不过,这些东西稍后会在第7章讨论。

1.3.2 函数式编程的内涵
一般说来,面向对象程序员和函数式程序员看到问题和解决问题的方式有所不同。面向对象思维模式采用的方式是,把应用领域定义成一组名词(类),函数式思维模式则会把解决方案视为各种动词及其组合(函数)。虽然二者产生的结果可能是一样的,但函数式解决方案会在简洁、可理解、可重用方面更胜一筹。确实如此!希望在本书结束时你也会认同,函数式编程会让程序设计更为优雅。这是一种思维模式的转换,从考虑名词,到思考动词,但这个旅程物有所值。无论如何,我们都相信,Clojure会让你获益良多,反哺到你选择的语言中—唯有打开心胸,方能体会这一点。

1快点回答,组合子(combinator)的定义是什么?云计算呢?企业级呢?SOA呢?Web 2.0呢?真实世界呢?黑客呢?通常,追求有唯一准确定义这件事无异于缘木求鱼。

相关文章
|
SQL XML Java
若依框架 --- 使用数据权限功能
若依框架 --- 使用数据权限功能
2646 0
|
弹性计算 自然语言处理 运维
阿里云OSCopilot新手测评体验
**OS Copilot是阿里云为Linux打造的智能助手,具备自然语言处理、命令执行和运维功能。用户在Alibaba Cloud Linux 3服务器上安装后,可通过命令行交互,如`co 你好`,进行问答、代码生成(codegen)和摘要(codesum)等。交互模式含聊天、代码生成和代码摘要。产品对新手友好,尤其是在命令执行和问题解答上表现突出,但目前仅限x86_64架构的Alibaba Cloud Linux 3。用户期待其支持更多操作系统和连续执行命令功能,并能与其他云服务如ECS、ACK联动增强云上开发体验。**
428 2
阿里云OSCopilot新手测评体验
|
Unix Linux
linux中在进程之间传递文件描述符的实现方式
linux中在进程之间传递文件描述符的实现方式
|
移动开发 定位技术 计算机视觉
Anaconda下Python中h5py与netCDF4模块下载与安装方法
Anaconda下Python中h5py与netCDF4模块下载与安装方法
531 1
|
自然语言处理 监控 开发者
springCloud之Sentinel流量路由、流量控制、流量整形、熔断降级
springCloud之Sentinel流量路由、流量控制、流量整形、熔断降级
865 0
|
机器学习/深度学习 存储 监控
基于YOLOv8深度学习的遥感地理空间物体检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测(1)
基于YOLOv8深度学习的遥感地理空间物体检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测
|
监控 Ubuntu Unix
Sentry 监控 Docker 方式部署
Sentry 监控 Docker 方式部署
1240 0
STM32:串口发送/接收HEX数据包代码篇(内含:实物图接线图+代码部分+个人笔记)
STM32:串口发送/接收HEX数据包代码篇(内含:实物图接线图+代码部分+个人笔记)
1698 0
STM32:串口发送/接收HEX数据包代码篇(内含:实物图接线图+代码部分+个人笔记)
|
SQL SpringCloudAlibaba 网络协议
面试:如何通过 MyBatis 查询千万数据并保证内存不溢出?
面试:如何通过 MyBatis 查询千万数据并保证内存不溢出?
2267 0
面试:如何通过 MyBatis 查询千万数据并保证内存不溢出?
|
NoSQL MongoDB 数据库
二.MongoDB入门-Mongodb权限管理
MongoDB入门-Mongodb权限管理