函数式语言(function language)

Posted wudidd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数式语言(function language)相关的知识,希望对你有一定的参考价值。

 

function language

一、函数式语言(function language)

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

二、Include
(1)纯函数式编程语言

  ①强静态类型

  Concurrent Clean
   简称Clean,它与Haskell有很多相似之处,是由c编写的。Clean程式很容易跨平台,在大部分情况下,要转移到另一个平台只需在那里重新编译一次即可,不用改动源代码。
  Haskell
  是一种标准化的,通用的纯函数式语言,有非限定性语义和强静态类型。它的命名源自美国逻辑学家哈斯凯尔加里。在Haskell中,“函数是第一类物件”。作为一门函数式语言,主要控制结构是函数。Haskell语言是1990年在编程语言Miranda的基础上标准化的,并且以λ演算为基础发展而来。这也是为什么Haskell语言以希腊字母“λ”(Lambda)作为自己的标志。Haskell具有“证明即程序、命题为类型”的特征
  Miranda
  一种编程语言,采用惰性求值的纯粹函数编程语言,由英国学者大卫·特纳(David Turner)所设计。采用来自ML语言与Hope语言的概念,他用此来作为他先前所设计的SASL语言与KRC语言的后继者。稍后发展出的Haskell语言,采用了很多由Miranda所发展出的概念。这个编程语言由英国的研究软件公司(Research Software Ltd.)研发,这间公司拥有这个编程语言的商标权。在1985年首次发表以C语言写成的直译器,能够在类UNIX系统上运作。随后在1987年与1989年发行了更新版。
   ②弱类型
    Lazy K
  
(2)非纯函数式编程语言
  ①强静态类型
  F#
  F#是由微软发展的为.NET语言提供运行环境的程序设计语言,是函数编程语言(FP,Functional Programming),函数编程语言最重要的基础是Lambda Calculus。它是基于OCaml的,而OCaml是基于ML函数编程语言。有时F#和OCaml的程序是可以交互编译的。
  ML
  ML是一个通用的函数式编程语言,一般被归为非纯函数式编程语言,因为它允许副作用和指令式编程。
  OCaml
  最早称为Objective Caml,是Caml编程语言的主要实现,由Xavier Leroy,Jérôme Vouillon,Damien Doligez,Didier Rémy及其他人于1996年创立。OCaml是开放源代码项目。此项目的管理和大部分维护工作交由INRIA。
  Scala

  是一门多范式的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。
  ②强动态类型
  Clojure
  Erlang
  Lisp
  LOGO
  Mathematica
  R

  Scheme

  ③弱类型
  Unlambda
 
(3)其他函数式编程语言
  APL语言
  XSLT
  
 

 三、Why Popular
  函数式编程语言相对于其他编程语言具有以下意义:首先,函数式编程语言的代码十分简单,加快了开发的速度。并且由于在使用函数式编程语言时,程序员会大量使用到函数,从而减少了重复的代码,因而程序比较短。其次,函数式编程语言更加接近我们使用的自然语言,程序员在学习和使用它的时候更加快捷容易。函数式编程语言的自由度很高,十分接近自然语言写出的代码。另外,函数式编程语言的代码管理更加方便。函数式编程不会对外部产生依赖,也不会修改外界的状态。程序员只需把指定的参数给函数,相同的参数其返回的结果必定是相同的。另外,函数式编程语言还支持并发编程,这就使得程序员在进行函数式编程时完全不用考虑死锁的问题,因为它根本就不修改变量,所以就不存在锁线程的问题。最后,函数式编程语言的代码支持代码热升级。

以上是关于函数式语言(function language)的主要内容,如果未能解决你的问题,请参考以下文章

Function program language

太阁技术秀再聊函数式编程(Functional Programming)

关于functional program language 的理解

37.10. C-Language Functions

jdk1.8新特性(四大函数式接口与Stream流式计算)

37.5. Query Language (SQL) Functions