图灵机产生命令式编程语言,lambda表达式产生函数式编程语言

………………实际上lisp和lambda演算什么鬼关系都没有。早期的lisp更接近图灵机1图灵机有通用图灵机,可以给定一段代码f和参数x计算f x,lisp有eval函数,而lambda演算里没有对应的概念2通用图灵机接受的f本身也可以带有通用图灵机代码,这样f就可以调用其他函数,而lisp的函数也是通过eval其他函数的表达式来调用其他函数的,有人可能会说这是lambda演算的严格求值,但是lisp中与函数相对的宏和lambda演算中与此相对的惰性求值完全不是一个东西3图灵机代码是写在纸带上的,所以当一个通用图灵机上的函数接受另一个函数做参数时,可以很简单地实现“检查这个函数的代码如果不是我想要的就不计算直接返回错误值”,lisp只要把lambda表达式quote住就可以实现,而lambda演算完全做不到,只要传入一个函数,肯定有调用它的那一天,而且可以证明不存在可以分辨出某一类lambda函数的lambda函数4图灵机的计算往往是抹掉原来的参数并在原地写出结果,所以可以轻易写出接受参数地址而不是把参数复制一份传入的函数,从而轻易实现副作用,有这样函数的lisp只要修改一下eval的lisp代码就可以用原来的lisp实现,而lambda演算无论如何也实现不了副作用5通用图灵机里函数表现为代码而不是闭包,而lisp系语言在scheme出现之前,(lambda (x) (lambda (y) (cons x y)))这个函数返回值也是(lambda (y) (cons x y))这段代码而不是闭包,而你如果写一个lambda演算解释器出现这种情况是要被打死的而后期的lisp很多特性,像宏,cps变换,尾递归优化也是先从实践中提出来,理论后续跟进的,甚至闭包的基础——词法作用域也是来自过程式语言algo(let ((x 0)). (defun add () (setf x (+ x 1))) (defun sub () (setf x (- x 1))))这段代码是很经典的lisp风格,但是也是以副作用为基础的说起来麦卡锡设计lisp,初衷是要做出一种简洁灵活的语言,至于能不能实现就不管了,而c语言从一开始就是朝着操控冯诺依曼结构计算机硬件能力越来越强的方向走的。过程式和函数式的区别,更多的是实干家和理论家,工程师和研究员,hacker和schemer的区别,而不是图灵机和lambda演算的区别学渣意见,信不信由你
■网友
图灵机模型是一种模型,lambda演算是一种演算 所以你并不能那样理解再补充一点,从 Haskell 的do记法来看,指令式的程序是可以被转换成偏函数式风格的,
■网友
图灵机产生了状态机+存储的模型,这是什么模型呢,编译器,游戏传统AI,他们的模型
当然他们并不会用图灵机这种过于复杂的模型,有限状态自动机和下推自动机够用了
一个例子是正则表达式。所以这玩意绝对不是命令式的。

【图灵机产生命令式编程语言,lambda表达式产生函数式编程语言】 函数式编程实际上来自于泛函。当然,函数式编程的思路的确是受到了lambda演算的很大影响,这一点倒是没错。

命令式编程来自算术。这个来源可是比图灵机或者函数式编程早得多的。硬要说的话只有命令式编程才是传承自花剌子模的algorithm,图灵机,lambda演算和递归函数都是后来为了数学上的形式化才提出的。

如果非要说自动机和谁像的话,其实和数字电路。一块电路存在几种可能的稳态,输入和输出,而输入会改变稳态并产生输出,这就是有限状态机的做法。
但这是最抽象最宏观的看法。

你要是有无限多的内存,那就是图灵机了对吧…………可惜你没有那么多而且也没法用那么多。


    推荐阅读