转:浅析函数式编程与命令式编程的区别(一)计算模型的区别

原文网址 http://www.cnblogs.com/lisperl/archive/2011/11/21/2257360.html

重点段落:

图灵的计算模型就是图灵机,这是一种类似于有穷自动机或下推自动机的机器,但具有访问一条无界的存储“带子”上任意单元的能力。图灵机通过不断修改其存储带上的单元值,以一种命令式的方式进行计算,就像高级命令式语言通过修改变量的值做计算一样。换句话说,图灵机就是命令式语言的计算模型,通过修改变量的值来影响后续的计算。也就是说命令式语言内部是有状态的,计算的过程也就是状态转换的过程,改变状态的方式就是通过赋值等方式改变存储器中变量的值。

  丘奇的计算模型是lambda 演算,基于带参表达式的概念。它包括一条变换规则(变量替换)和一条函数定义方式。在lambda演算中,每个表达式都代表一个只有单独参数的函数,这个函数的参数本身也是一个只有单一参数的函数,同时,函数的值是又一个只有单一参数的函数。Lambda演算强调的是变换规则的运用,而非实现它们的具体机器。lambda 演算就是函数式语言的计算模型,函数式语言的计算的主要方式是将函数作用与给定参数上,在函数式语言中可以没有命令式语言所必需的变量和赋值语句,一切(包括程序本身)都是从输入到输出的函数。

命令式语言的程序员:

  要计算a和b的gcd,先检查a和b是否相等,如果相等就打印他们之中一个并且结束;否则就把较大的那个换成他们的差,并重复这以工作。

  函数式语言的程序员:

  当a和b相等时,它们的gcd就定义为a;当a和b不相等时去计算c和d的gcd,其中c是两个数较小的一个,d是两个数的差。要计算给定一对数的gcd,请展开并简化上述定义直到它结束。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值