function Language
什么是函数式语言:
函数式语言(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的更多相关文章
- 关于Function Language(函数式语言是什么?包含哪些语言?为什么函数式语言流行?)
1.What? Function Language是一种非冯诺依曼式的程序设计语言.函数式语言的主要成分是原始函数.定义函数和函数型. 这种语言具有较强的组织数据结构的能力,可以把某一数据结构(如数组 ...
- MillWheel: Fault-Tolerant Stream Processing at Internet Scale
http://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/41378.pdf 为什么要做M ...
- Moment.js学习(一)源代码
本篇主要是学习Moment.js.类库源代码如下: 2.4版本. //! moment.js //! version : 2.4.0 //! authors : Tim Wood, Iskren Ch ...
- jqmobi 转换语言
当第一次打开APP时,检测手机默认的语言,设置APP的语言跟手机默认一样:当点击了APP里面的设置语言的按钮,存储当前设置的语言 :关闭APP:再一次打开APP时,检测存储在APP里面的语言,转换语言 ...
- shopnc二次开发(一)
---恢复内容开始--- 以前没有怎么接触过shopnc,感觉界面挺漂亮的,不过后来自己需要开发一个电商系统,就顺便参考了下,感觉构架垃圾的一塌糊涂.不过平时做这个系统二次开发的业务比较多,所以简单的 ...
- JsRender系列-11
<!DOCTYPE html> <html> <head> <script type="text/javascript" src=&quo ...
- CI加载流程小结
无聊,决定水一把. CI(CodeIgniter)是我最早接触的一个框架,到现在也只是用了其中一点零碎的方法.一直想对其流程做个小结,却总是因各种各样的“理由”挨着.看见别人图表齐上阵,没那耐心,就从 ...
- JavaScript判断系统语言
var lang= null; function language(){ var language=null; if (navigator.appName == 'Netscape'){ langua ...
- [Hadoop]Hadoop章1 Hadoop原理解析
Hadoop是Apache软件基金会所开发的并行计算框架与分布式文件系统.最核心的模块包括Hadoop Common.HDFS与MapReduce. HDFS HDFS是Hadoop分布式文件系统(H ...
随机推荐
- Python语法教程-基础语法01
目录 1. Python应用 2. 在Linux中写python 3. Python基础语法 1. 注释 2. 变量定义及类型 3. 格式化输出 4. 用户输入 5. 运算符 6.数据转换 7. 判断 ...
- 记一个bug
就在刚刚,测试叫我去看一个问题,有用户反应,在业务页面,出现了一部分重复的内容,而且点击按钮弹窗里,出现了只有个title,没有body的情况. 事情的现象就是这样.然后我就开始着手找原因了.首先声明 ...
- org.apache.ibatis.builder.IncompleteElementException: Could not find result map com.hp.entity.Emp
错误提示代码: org.apache.ibatis.builder.IncompleteElementException: Could not find result map com.hp.entit ...
- ElasticSearch(八):elasticsearch.yml配置说明
集群名称:cluster.name: my-application确保在不同的环境中的集群的名称不重复,否则,节点可能会连接到错误的集群上 节点名称:node.name: node-1默认情况下,当节 ...
- ZABBIX监控mysql主从状态
模板如下 <zabbix_export> <version>3.4</version> <date>2018-11-30T08:28:28Z</d ...
- Filebeat原理与简单配置入门
Filebeat工作原理 Filebeat由两个主要组件组成:prospectors 和 harvesters.这两个组件协同工作将文件变动发送到指定的输出中. Harvester(收割机):负责读取 ...
- Linux soft lockup分析
关键词:watchdog.soft lockup.percpu thread.lockdep等. 近日遇到一个soft lockup问题,打印类似“[ 56.032356] NMI watchdog: ...
- 传统C/S软件的"断骨增高"
前言: 由于院内临床业务需要高频强功能的用户界面互操作性要求,使得在HIT行业中存在大量的C/S型软件,尽管B/S软件应用范围正在扩大,但在很多场景中,C/S软件仍然顽强的生存和发展着. 不过随着行业 ...
- 定制json序列化
最近有人问我怎么定制一个json序列化,使序列化的时候只写出声明的父类成员,而不要把实际子类的成员写出来.当然,序列化用的是大家用的最多的json.net. 简单的说,这是个契约怎么解析的问题,jso ...
- 基于struts2、hibernate、spring、shiro、MySQL的项目开发
使用maven管理jar包的依赖 < project xmlns = “ http://maven.apache.org/POM/4.0.0 ” xmlns :xsi = “ http://ww ...