TOP

C#函数式编程(一)
2017-10-13 10:42:28 】 浏览:10394
Tags:函数 编程

编程语言范式

常见的编程范式有命令式编程(Imperative programming函数式编程逻辑式编程;

许多现存的编程语言都可基于其计算模型加以分类,归入某些语言族,或者属于某种编程范式。按照不同的规则,可以有多种分类的方法,而且不同的学者对某些语言的具体归属也有不同的意见。

给出一种系谱:

说明式(Declarative )                   命令式( Imperative

  函数式  Lisp, ML, Haskell                冯诺依曼 C, Ada, Fortran

  数据流  ld, Val                         脚本式 Perl, Python, PHP

  逻辑式  Prolog                         面向对象 Smalltalk, C++, Java, C#

  基于模板 XSLT

有些编程范式并不能按以上的方法进行分类,比如:元编程,泛型编程。

一种语言并不是只从属于一种编程范式,有些语言本身就是为支持多范式设计的;

比如:Lisp就同时支持函数式编程、面向对象、元编程。

命令式编程是面向计算机硬件的抽象,有变量(对应着存储单元),赋值语句(获取,存储指令)表达式(内存引用和算术运算)和控制语句(跳转指令);

 

函数式编程

定义

In computer science, functional programming is a programming paradigm that treats computation as the eva luation of mathematical functions and avoids state and mutable data.

函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念。<Wiki>

函数式编程是面向数学的抽象,将计算描述为一种表达式求值,一句话,函数式程序就是一个表达式

函数式编程最重要的基础是 λ 演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。和指令式编程相比,函数式编程的函数的计算比指令的执行更重要。和过程化编程相比,函数式编程的函数的计算可随时调用。纯函数式编程不需要变量;

 

语言族

函数式编程中最古老的例子可能要数1958年被创造出来的LISP,当年的Lisp由于各种设计缺陷(内存损耗、闭包问题、生成程序执行效率等)没能发展好。较现代的例子包括Haskell、Clean、Erlang 和Miranda等。

现代编程语言,如C#、Python、Ruby、Scala等等,它们都受到了函数式编程语言的影响,比如C#中的lamada表达式、Linq。

基于JVM实现的Lisp方言如Scala, Clojure也是越来越受关注,这里所谓的Lisp方言,主要是因为语法上沿用了Lisp中的S表达式

基于.net平台的有F#,微软的首个函数式编程语言。<MSDN>

 

不同语言的抽象层次

                                                   计算

              C#         ----->     对象

              Python      ----->    函数式

              C语言      ----->    函数 (面向过程)

              汇编语言

         计算机硬件  ----->    指令                 计算机

 

函数式复兴

Anders Hejlsberg,C#编程语言的首席架构师,2010年关于《编程语言的发展趋势及未来方向》演讲

从一个数组中找出所有的偶数

List<int> list = new List<int> { 1,2,3,4,5,6,7};

常规的命令式写法:

    List<int> ret = new List<int>();

    foreach (var item in list)

    { if (item % 2 == 0)

 &nb
C#函数式编程(一) https://www.cppentry.com/bencandy.php?fid=106&id=163773

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C#利用WinForm调用WebServices实.. 下一篇如何C#操作SQLite数据库