什么是函数式语言:

函数式语言(functional language)一类程序设计语言.是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分是原始函数、定义函数和函数型.这种语言具有较强的组织数据结构的能力,可以把某一数据结构(如数组)作为单一值处理;可以把函数作为参数,其结果也可为函数,这种定义的函数称为高阶函数.程序就是函数,程序作用在结构型数据上,产生结构型结果,从根本上改变了冯·诺伊曼式语言的"逐词"工作方式.

函数式语言具有简明性和独特的表达能力,因此可用它来研究传统程序设计语言的语义.巴科斯<Backus,J.)分析了传统程序设计语言的缺陷,认为这些缺陷主要是采用冯·诺伊曼式系统结构所造成的.巴科斯提出的函数式程序设计系统FP摆脱了传统的冯·诺伊曼计算机结构,因此,需要一种新型的非冯·诺伊曼式的系统结构为后援.

常见的函数式语言有三类:

1 lisp类,分common lisp和scheme两大小类,特点是链表是基本语法结构和数据结构(因为函数式语言的不变性需要大量的数据拷贝,而list则可以以很小的代价进行拷贝)和类型系统不严格
      2 ML类,包括OCaml和F#,haskell等,特点是语法类似命令式,有严格和复杂的类型系统,能直接编译为本地代码
      3 各种脚本语言,如python,ruby,lua等,理论上javascript也是纯正的函数式语言。大多数仅仅是实现了lambda函数,有的实现了continue等更多特征。

函数式语言流行的原因:

无需线程等操作系统支持,函数式语言可以轻易实现模拟多线程。go语言里面就大量使用这种手法。现代很多脚本语言也用来写异步语法。比如我们写界面语言,经常要等待键盘输入,或者等待某个操作完成(比如读盘或者下载)。过去我们这个时候只能写一个无限循环不停等,其他部分的操作就只能等了。现在只要马上返回一个触发函数,这个触发函数保留了当前运行状态然后去干别的事情。等我们要的操作完成的时候,去调用那个触发函数,我们就继续从刚才的断点往下跑了。使用函数式编程的匿名函数还可以把这样一个阻塞式函数自动变成非阻塞式的。传统方法不是不能做到,只是很难在简单写程序的情况下又保证跑下去和当时一样。

现代程序的一个特点是要做大量的并行操作。网页程序同时在刷新界面元素,等待后台读取数据,还在监视用户输入,同时还在播放背景音乐。使用函数式编程可以大大简化。传统这些用的是回调函数,函数式编程可以直接把回调函数写成匿名函数包在调用语句里面,十分直观。更别谈如果要用到外部变量的时候非函数语言如何正确传播变量了。

function Language的更多相关文章

  1. 关于Function Language(函数式语言是什么?包含哪些语言?为什么函数式语言流行?)

    1.What? Function Language是一种非冯诺依曼式的程序设计语言.函数式语言的主要成分是原始函数.定义函数和函数型. 这种语言具有较强的组织数据结构的能力,可以把某一数据结构(如数组 ...

  2. MillWheel: Fault-Tolerant Stream Processing at Internet Scale

    http://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/41378.pdf   为什么要做M ...

  3. Moment.js学习(一)源代码

    本篇主要是学习Moment.js.类库源代码如下: 2.4版本. //! moment.js //! version : 2.4.0 //! authors : Tim Wood, Iskren Ch ...

  4. jqmobi 转换语言

    当第一次打开APP时,检测手机默认的语言,设置APP的语言跟手机默认一样:当点击了APP里面的设置语言的按钮,存储当前设置的语言 :关闭APP:再一次打开APP时,检测存储在APP里面的语言,转换语言 ...

  5. shopnc二次开发(一)

    ---恢复内容开始--- 以前没有怎么接触过shopnc,感觉界面挺漂亮的,不过后来自己需要开发一个电商系统,就顺便参考了下,感觉构架垃圾的一塌糊涂.不过平时做这个系统二次开发的业务比较多,所以简单的 ...

  6. JsRender系列-11

    <!DOCTYPE html> <html> <head> <script type="text/javascript" src=&quo ...

  7. CI加载流程小结

    无聊,决定水一把. CI(CodeIgniter)是我最早接触的一个框架,到现在也只是用了其中一点零碎的方法.一直想对其流程做个小结,却总是因各种各样的“理由”挨着.看见别人图表齐上阵,没那耐心,就从 ...

  8. JavaScript判断系统语言

    var lang= null; function language(){ var language=null; if (navigator.appName == 'Netscape'){ langua ...

  9. [Hadoop]Hadoop章1 Hadoop原理解析

    Hadoop是Apache软件基金会所开发的并行计算框架与分布式文件系统.最核心的模块包括Hadoop Common.HDFS与MapReduce. HDFS HDFS是Hadoop分布式文件系统(H ...

随机推荐

  1. SQLServer之创建视图

    视图定义 视图是一个虚拟的表,是一个表中的数据经过某种筛选后的显示方式,视图由一个预定义的查询select语句组成. 使用SSMS数据库管理工具创建视图 1.连接数据库,选择数据库,展开数据库-> ...

  2. c/c++ gdb 调试带参数的程序

    直接gdb pgname 参数1 这种方式,参数1是不会带到gdb里的 1,首先启动程序 gdb pgname 2,设置程序的参数 set args 参数1

  3. Lua中string.format占位符的使用

    虽然lua中字符串拼接"string.format"相对于".."消耗较大,但有时为了代码的可读性,项目中还是经常用到"string.format&q ...

  4. table 的宽度设置无效

    1.在table 标签添加样式 table-layout: fixed; 必须设置width的值:<table style="table-layout: fixed"> ...

  5. 用kali执行arp攻击-----------使对方断网

    实现原理 其主要原理是局域网内的"攻击机"通过冒充同网络号下的"受害者主机"的物理地址(mac地址),通过欺骗网关,让网关原来应该发给"受害者主机&q ...

  6. 【初学必备】Win10环境下Anaconda安装

    Anaconda集合了python,Spyder,Jupyter notebook及conda-----包管理器与环境管理器(含常用的panda,numpy等),省去单独下载的繁琐步骤,方便使用. 注 ...

  7. LeetCode算法题-Number Complement(Java实现-五种解法)

    这是悦乐书的第240次更新,第253篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第107题(顺位题号是476).给定正整数,输出其补码数.补充策略是翻转其二进制表示的位 ...

  8. Python基础——4高阶函数

    高阶函数 函数本身可用变量指向,把变量当做函数参数的函数成为高阶函数 map and reduce map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每 ...

  9. django 视图模式

    一 视图 FBV --- function based view(基于函数视图) CBV --- class based view(基于类的视图函数) 二 请求方式 get post put/patc ...

  10. linux安装成功后怎么调出终端

    一.Ubuntu 桌面如下,点击搜索 二.输入terminal 终端 三.锁定到菜单栏 四.接下来就可以练习linux下的常用命令,如:ls  mkdir  cat    touch 等等 这些命令后 ...