函数式编程语言(functional language)
内容根据百度词条整理!
转载请声明来源:https://baike.baidu.com/item/%E5%87%BD%E6%95%B0%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/22881056
1.WHAT?
函数式语言的核心特征:
(1)以“函数”为首,如同命令式语言中的“变量”,函数可以赋值给其他变量,可以作为其他函数的参数,
或者作为其他函数的返回值。
(2)不修改变量的值。
(3)只有表达式,没有语句。此处的语句指的是没有返回值得某些操作。
(4)引用透明(Referential transparency),函数的运行不依赖与外部变量或“状态”,简单的说就是,
同一个输入(参数),总是会产生同一个输出(返回值),这与数学函数的特征很一致。
命令式语言因为全局变量等的存在,就无法做到这一点。
(5)对比命令式语言,递归形式的循环。
2.INCLUDE?
纯函数式编程语言
- 强静态类型
- Concurrent Clean
- 弱类型
- Lazy K
非纯函数式编程语言
- 强静态类型
- 强动态类型
- 弱类型
- Unlambda
其他函数式编程语言
1、并行。在函数式编程中,程序员无需对程序修改,程序就可以并发运行。程序运行期间,不会产生死锁现象。原因是通过函数式编程所得到的程序,在程序中不会 出现某一数据被同时修改两次及以上的情况,同样的,两个不同的线程就更不用说了。由于函数式编程有这样的优点,导致了程序员完全不用花费精力去考虑增加某个线程带来的并发问题。
2、单元测试。在函数式编程中,由于程序中的每一个符号都是final后的,所以这样的函数不会产生副作用。这就导致了在某个地方产生修改,同时不会有函数修改过在自身范围之外的变量或者状态被另外的函数所使用。这就导致了函数的返回结果只是返回值。只有函数自身的参数才会影响函数的返回值,所以在编程的时候,对程序中的每个函数而言,程序员只需在控制它们的参数,而不用在意函数自己点顺序以及函数外部变量和状态就能正确的编程。与函数式编程相比,命令式编程就没有这样的优势了,在检查函数的返回值的同时程序员还必须检查函数是否影响到了函数的外部状态和变量。
3、没有额外作用。副作用是指的是函数内部与外部互动。比如,函数在自身内部可以对函数以外的其他变量进行修改,这样就会产生其他结果。在函数式编程中,想要达到这样的目的就必须让函数自身要保持独立。在函数式程序语言中,所有的功能的结果就是一个返回值,不存在其他的行为,包括对外部变量的修改。
4、不修改状态。在函数式编程中,程序语言在使用中是会不修改变量的,它的一个特性可以使得函数式编程语言区别于其他的程序语言。在其他类型的语言中,变量是用来保存状态的。由于函数式编程不修改变量,导致了这些状态不能存在于变量中。那么,函数式编程语言保存状态的方法是使用参数来保存,递归方法是最好的例子。由于采用了递归方法,函数式编程语言在运行速度上相对于其他语言较慢,所以,速度不够快是函数式编程语言长期不能广泛使用的主要原因。
5、引用透明。在函数式编程中,引用透明指的是运行函数的时候,函数的没一个步骤都不会不牵连到函数的外部变量或状态,而是只依赖于函数输入的参数,相同的参数输入总会得到相同的函数返回值。而在其他类型的语言中,函数的返回值不仅仅与函数的参数传入有关,也与当前的系统状态有关。在不同的系统状态的情况下,函数的返回值不同。
6、代码部署热。在以前,假如想在Windows上安装更新,安装之后重启计算机是必须进行的步骤,可能还不只一次的重启。即使是仅仅安装了一个小的软件也不能免于重启的步骤。一些特殊的系统,比如电信系统,这样的系统必须保证任何时间都在运行。因为如果在系统更新时紧急拨号失效,就可能造成很大的损失。最理想的情况是在完全不停止系统任何组件的情况下,达到更新相关的代码的目的。这样的想法在命令式编程中是不可能的。对函数式的程序,所有的状态即传递给函数的参数都被保存在了堆栈上,这使的热部署轻而易举。实际上,所有我们需要做的就是对工作中的代码和新版本的代码做一个差异比较,然后部署新代码。其他的工作将由一个语言工具自动完成。
优点总结:首先,函数式编程语言的代码十分简单,加快了开发的速度。并且由于在使用函数式编程语言时,程序员会大量使用到函数,从而减少了重复的代码,因而程序比较短。其次,函数式编程语言更加接近我们使用的自然语言,程序员在学习和使用它的时候更加快捷容易。函数式编程语言的自由度很高,十分接近自然语言写出的代码。另外,函数式编程语言的代码管理更加方便。函数式编程不会对外部产生依赖,也不会修改外界的状态。程序员只需把指定的参数给函数,相同的参数其返回的结果必定是相同的。另外,函数式编程语言还支持并发编程,这就使得程序员在进行函数式编程时完全不用考虑死锁的问题,因为它根本就不修改变量,所以就不存在锁线程的问题。最后,函数式编程语言的代码支持代码热升级。
函数式编程语言(functional language)的更多相关文章
- Functional language(函数式编程语言)初步了解
对于函数式语言并不太了解,查询了百度.博客.知乎等做了以下总结. What 函数式语言(functional language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分 ...
- 函数式语言(Functional language)简单介绍
函数式语言(functional language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分是原始函数.定义函数和函数型. 函数式语言有:Haskell,Clean,M ...
- 函数式编程语言(Fuction Program Language)
一.什么是函数式编程语言 函数式编程语言(functional progarm language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分是原始函数.定义函数和函数型. ...
- Functional Language
1.What is functional language? 函数式语言(functional language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分是原始函数.定 ...
- 关于函数式编程(Functional Programming)
初学函数式编程,相信很多程序员兄弟们对于这个名字熟悉又陌生.函数,对于程序员来说并不陌生,编程对于程序员来说也并不陌生,但是函数式编程语言(Functional Programming languag ...
- 函数式编程语言(Functional Program Language)
(一) 什么是函数编程语言 简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论. 是一种编程典范, ...
- 函数式语言(functional language)定义、函数式语言的种类以及为什么函数式语言会流行起来的学习笔记
一.什么是函数式语言? 函数式语言一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分是原始函数.定义函数和函数型.这种语言具有较强的组织数据结构的能力,可以把某一数据 ...
- 对Functional Language的认识
What: A functional language is a programming language built over and around logical functions or pro ...
- Functional language 函数
一.什么是函数式语言? 函数式语言一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分是原始函数.定义函数和函数型.这种语言具有较强的组织数据结构的能力,可以把某一数据 ...
随机推荐
- [No000012D]WPF(5/7)依赖属性
介绍 WPF带来了很多传统 Windows 应用程序没有的新特性和选择.我们已经讨论了一些 WPF 的特性,是时候更进一步介绍其他特性了.当你读完这个系列之前的文章,我希望你已经或多或少地了解了 WP ...
- MyBatis中choose when正确写法
<choose> <when test="scoreRange!=null and scoreRange eq 1"> AND sc.score <! ...
- Win10+Ubuntu18.04 UEFI启动模式SSD+HDD
新手操作徒手安装Ubuntu,踩坑无数. 分享一篇好的经验:https://blog.csdn.net/xrinosvip/article/details/80428133(下附原博客) 踩坑大集合: ...
- Window ferformance toolkit 学习
1.环境配置 2.内存泄露 a. 编写自己的wprp文件: http://msdn.microsoft.com/en-us/library/hh448223.aspx b.启动 @echo off s ...
- 2018/09/13《涂抹MySQL》【MySQL复制特性】学习笔记(六)
推荐一首歌 - <可不可以>张紫豪 好吧,随便从排行榜上找了一首 读 第十一章<MySQL的复制特性> 总结 1:复制(Replication) 应用场景? - 提高性能 (通 ...
- spring quartz动态修改执行时间
1.获取schedule <bean name="startQuartz" lazy-init="false" autowire="no&quo ...
- linux read()和write
参考http://www.cnblogs.com/xiehongfeng100/p/4619451.html 1. read总是在接收缓冲区有数据时立即返回,而不是等到给定的read buffer填满 ...
- MSSQL2008 部署及开启远程连接
最近不少用户在windows2003 server 32位操作系统上安装SQL Server2008总是失败,出现大量错误.今天经过通过我反复测试安装,找出了一个便捷的安装方法,节省大家宝贵时间,具体 ...
- 【托业】【新托业TOEIC新题型真题】学习笔记10-题库七-P7
1.to request a review of information 要求审查资料 2.inform of 将…告知(某人); 3.flammable [ˈflæməbl]adj.易燃的,可燃的; ...
- docker+redis安装与配置,主从+哨兵模式
docker+redis安装与配置 docker安装redis并且使用redis挂载的配置启动 1.拉取镜像 docker pull redis:3.2 2.准备准备挂载的目录和配置文件 首先在/do ...