设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

函数式编程和J编程语言

2014-6-3 14:07| 发布者: joejoe0332| 查看: 8164| 评论: 0|原作者: 白文, LeoXu, zhych, 海王, 中奖啦, 无若|来自: oschina

摘要: 这里是一个使用J编程语言作为例子对函数式编程所做的一个简要介绍. 用几个示例来向您展示函数式语言令人影响深刻的能力,以及它们在数学领域的应用. 讨论了使用J语言作为数学符号替代品. ...

摘要:


  这里是一个使用J编程语言作为例子对函数式编程所做的一个简要介绍.  用几个示例来向您展示函数式语言令人影响深刻的能力,以及它们在数学领域的应用.  讨论了使用J语言作为数学符号替代品.


  主要领域:函数式编程,J编程语言.


  关键词:函数式编程,J编程语言.


1 介绍


  计算式是一种用来解释语言的机制. 计算机所解释 (执行特定动作的) 语句,中所周在叫做计算机的机器语言. 因而它跟随关于计算机组织的研究,被关联到有关计算机语言的组织的研究.


  计算机语言可以用很多种方式分类。而机器语言直接为计算机所解释。更高级别的计算机语言则往往在某种程度上独立于特定的计算机,并且在程序可能被解释(执行)之前需要翻译(编译)成机器语言。语言也依照系统所采用的运算基础模型,而被分成 命令解析型 和 可应用型 两类.


  抽象是计算领域中的一个重要概念. 一般而言,较高级别的语言更具抽象性.  抽象的关键工具是名称的运用. 一些复杂的项目给定了一个名称. 这个名称随后被用来作为一个另外一个项目的构造块,另外这个项目也会被命名,如此等等.  抽象是管理计算机程序的一种重要工具.



2, 函数编程是什么


  函数式编程不仅仅使用功能的编程语言。函数式编程的方法在实现方式上不同与命令式编程。功能编程范式涉及可靠地派生程序,分析程序、证明程序的正确性。这是因为函数式编程语言都基于从数学思想在,而数学工具可能需要程序推导、 分析和证明这样的过程。


  函数式编程语言 (应用语言) 至少在以下方式不同于传统的编程语言 (命令式语言) :


  2.1 名称的使用

  在命令式语言中,名称被关联到其值(状态)在计算过程中会发生变化的内存单元.


  在应用型语言中,名称被关联到存储在内存中的项目. 一旦在内存中被创建出来, 这个项目就再也不会被改变. 名称会被赋值给项目,只在这个项目需要在稍后的某个时间点被引用时,被存储到内存中. 被存储在内存中的项目作为参数用于后续函数式计算过程的函数中.


  例如,在C(一种命令式语言)中,我们可能会这样写:


   int foo;
...
   foo = 4;


  此例中我们将名称foo同一个大小足以容纳一个整形的特定内存单元相关联.  它在那一刻的状态是不确定的. 后来foo被赋值为4, 如示例,其状态就变成了4.


  在J(一种应用型语言),我们可能会这样写:


   foo =: 4


  一个项目 4 在内存中被创建,而名称foo被赋值到那个项目.


  请注意在C中我们会说值4被赋值给了foo,而在J中我们会说名称foo被赋值给了4. 这一差别是微妙的. 使用命令式语言的关注点在于内存单元,还有程序执行期间他们的状态如何改变.


  使用函数式语言的关注点在于内存中的项目. 一个项目一旦创建,它就再也不会被改变. 名称在它们提供对某些被存储在内存中的东西的引用,而不是一个普通的数据,这种意义上,更具抽象性. 函数被应用到项目来产生结果项目,而这一过程将重复直至运算完成.


  

  2.2 状态改变


  在命令式语言中,计算设计到被命令内存单元的状态改变.


  例如,考虑一下底下的的C (一种命令式语言) 程序:


#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{ int sum, count, n;
  count = 0;
  sum = 0;
  while (1 == scanf("%d\n", &n))
   { sum = sum + n;
     count++;
   }
  printf("%f\n", (float)sum / (float)count);
  exit(0);
}


  程序会从标准输入流中读入一些整型值,计算这些值的平均值,并将这个平均值写到标准的输出流。在平均值计算的一开始,内存单元count和sum的状态被初始化为0. 内存单元n针对每一个个整形读取做出改变. 另外,sum的状态会累加每一个读取的整形数,而count的状态会递增读取的整形数的个数. 一旦所有的整形数读取完了,它们的sum的累加值和计数也就知晓,那样平均值就可以被计算出来了.


  为了使用C的平均值计算程序,人们必须编译这个程序.


[jhowland@Ariel jhowland]$ make ave
cc     ave.c   -o ave
[jhowland@Ariel jhowland]$ echo "1 2 3" | ave
2.000000
[jhowland@Ariel jhowland]$


  使用函数式语言,计算涉及到函数应用程序. 复杂的计算需要一个应用程序的结果作为另外一个应用程序的参数. 这个过程被称作功能性组合. 函数式语言可能会有特殊的组合规则被应用与程序中. 基于数学函数思想的函数式语言,从数学中获得了不少的好处.  数学的技术和工具就可以被用于 (推导,简化,转换,以及证明正确性) 程序的有关方面.



酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部