非图灵机是什么意思
答案:1 悬赏:60 手机版
解决时间 2021-03-12 02:26
- 提问者网友:活着好累
- 2021-03-11 05:57
非图灵机是什么意思
最佳答案
- 五星知识达人网友:雪起风沙痕
- 2021-03-11 06:25
问题一:图灵机不是真空管机器,那图灵机是什么 抽象的计算机模型问题二:什么是函数式编程思维 1.表达式化
在
最初的时候,需要转变观念,去可变量,去循环,把命令式改成表达式,注意,这只是把你丢在荒山野岭让你感受一下,离开熟悉的环境,地球依然在转,但是有个
重点,那就是一切都是表达式; 为什么是表达式呢?这个问题就像为什么鱼在水里?
因为函数式建立在lambda演算之上而非图灵机,只不过两者被证明等价,所以你可以在你的机器上跑全是表达式的代码,就如有人证明天空适合鱼生存,所以
鱼可以在天上游
当你接受了鱼可以在天上游之后,就该上正餐了
1.5 数据与行为分离
这也是和面向对象不一致的地方,面向对象强调数据与行为绑定,但函数式不是,确切的说函数式 函数与数据等价,所以你才可以将函数当参数与返回值,你在设计时,切勿让数据自己长腿能跑,其次,行为必须消除副作用,不可以偷偷把数据改了,习惯第一条后,应该不会的
2.高阶逻辑
用
了函数式,就不要在想循环,赋值这些低阶逻辑了,而应该更高阶的思考问题,这比转化表达式更难,函数式又叫声明式,也就是你要做什么,只要说一下就行,而
非写个遍历,做个状态判断,用函数式你不需要考虑这些,你不知道函数式的列表是怎么遍历的,中间向两边?
从后往前?这也是为何函数式适合并发的原因之一,你想知道列表中大于3的数有多少,只要,list.count(_ > 3)
而不是写循环,你可以直接写你的业务,不要拘泥于细节,有点像sql, 你需要什么告诉电脑就行,你或许会问,count foreach filter
这些函数怎么来的? 因为有了他们你才不需要写循环,他们把你留在高阶逻辑中,这个问题的答案请看下面
3.组合子逻辑 或又叫 自底向上的设计
函
数式和OO是反的,面向对象是自顶向下的设计,函数式是自底向上的设计,也就是先定义最基本的操作,然后不断组合,不断堆积以满足你的所有需要,如sql
定义了select, from, where...这几个组合子,来满足你的查询需求,同理函数式语言会提供foreach,
map等组合子(操作)来满足你的需求,所以你必须自下而上的设计你的代码结构,并且满足你的需求,当你只用组合子写代码时,你会发现你写的全是高阶逻辑
如
果这些已有组合子满足不了你,你就得自己写,foreach不行,你就自己写递归,我告诉你,递归背后也是组合子,这里一些'大神'应该不知道,在图灵机
里,递归就是方法不断调用自己没什么好说的,但是在lambda演算中,匿名函数是没法调用自己的,所以递归是用Y组合子(又叫不动点组合子)把递归函数
自己求解出来再调用的,这才可以实现递归,并与图灵机的循环等价,有点跑题了,总之要想顺手的写函数式,最好用面向组合子的设计,注意,不是必须,组合子
演算和lambda演算可以相互转化,也就是,你完全可以写一堆杂乱的表达式,但没有组合子逻辑来得清爽,Haskell大规模使用monad这个特殊组
合子,始其变得统一整洁
好了,总结一下
函数式思维,其实就是组合子逻辑,用简单的几个函数组合来构建复杂逻辑,始终以高阶的角度去表达问题,而非依赖副作用。
知道这点,你用java也可以写函数式代码了问题三:什么是图灵机? 图灵机,又称图灵计算、图灵计算机,是由数学家阿兰·麦席森·图灵(1912~1954)提出的一种抽象计算模型,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的机器替代人们进行数学运算。
所谓的图灵机就是指一个抽象的机器,它有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。在每个时刻,机器头都要从当前纸带上读入一个方格信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动。
阿兰·麦席森·图灵是英国数学家、被称为计算机科学之父
阿兰·麦席森·图灵(Alan Turing,也被译作阿兰-图林)生平简介:
1912年6月23日,出生于英国伦敦。
1931年-1934年,在英国剑桥大学国王学院(King's College)学习。
1932年-1935年,主要研究量子力学、概率论和逻辑学。
1935年,年仅23岁的图灵,被选为剑桥大学国王学院院士。
1936年,主要研究可计算理论,并提出“图灵机”的构想。
1936年-1938年,主要在美国普林斯顿大学做博士研究,涉及逻辑学、代数和数论等领域。
1938-1939年,返回剑桥从事研究工作,并应邀加入英国政府破译二战德军密码的工作。
1940年-1942年,作为主要参与者和贡献者之一,在破译纳粹德国通讯密码的工作上成就杰出,并成功破译了德军U-潜艇密码,为扭转二战盟军的大西洋战场战局立下汗马功劳。 1943年-1945年,担任英美密码破译部门的总顾问。
1945年,应邀在英国国家物理实验室从事计算机理论研究工作。
1946年,这个时候,图灵在计算机和程序设计原始理论上的构思和成果,已经确定了他的理论开创者的地位。由于图灵的杰出贡献,年轻的他被英国皇室授予OBE爵士勋衔。
1947年-1948年,主要从事计算机程序理论的研究,并同时在神经网络和人工智能领域做出开创性的理论研究。
1948年,应邀加入英国曼彻斯特大学从事研究工作,担任曼彻斯特大学计算实验室副主任。
1949年,成为世界上第一位把计算机实际用于数学研究的科学家。
1950年,发表论文“计算机器与智能”,为后来的人工智能科学提供了开创性的构思。提出著名的“图灵测试”理论。
1951年,从事生物的非线性理论研究。年仅39岁的图林,被选为英国皇家学会会员。
1952年,在当年保守愚昧和冷战的时代,当警察得知图灵与同性朋友密切交往的消息之后,同性恋倾向的图灵被逮捕入狱。在法庭审判过程中,图灵明确告知人们,他认为自己没有做错什么事。在那个观念落后的年代,为了避免被判刑入狱,图灵被迫选择了为期一年的雌性激素注射的所谓“治疗”,才得以重新返回研究工作。
1953年-1954年,继续在生物和物理学等方面的研究。被迫承受的对同性恋倾向的“治疗”,致使原本热爱体育运动的图灵在身心上受到极大的伤害。
1954年6月7日,图灵被发现死于家中的床上。死因是氰化物中毒,警方调查结论是自杀。一代英灵,就此过早离去,成为人类科学史上的一大遗憾。
阿兰-图灵(Alan Turing,也被译作阿兰-图林)生平简介:
1912年6月23日,出生于英国伦敦。
1931年-1934年,在英国剑桥大学国王学院(King's College)学习。
1932年-1935年,主要研究量子力学、概率论和......余下全文>>问题四:图灵机与现代计算机的关系 图灵机的意义与思想内涵:
图灵提出图灵机的模型并不是为了同时给出计算机的设计,它的意义我认为有如下几点:
1、 它证明了通用计算理论,肯定了计算机实现的可能性,同时它给出了计算机应有的主要架构;
2、 图灵机模型引入了读写与算法与程序语言的概念,极大的突破了过去的计算机器的设计理念;
3、 图灵机模型理论是计算学科最核心的理论,因为计算机的极限计算能力就是通用图灵机的计算能力,很多问题可以转化到图灵机这个简单的模型来考虑。
对图灵机给出如此高的评价并不是高估,因为从它的设计与运行中,我们可以看到其中蕴涵的很深邃的思想。
通用图灵机等于向我们展示这样一个过程:程序和其输入可以先保存到存储带上,图灵机就按程序一步一步运行直到给出结果,结果也保存在存储带上。
另外,我们可以隐约看到现代计算机主要构成(其实就是冯诺依曼理论的主要构成),存储器(相当于存储带),中央处理器(控制器及其状态,并且其字母表可以仅有0和1两个符号),IO系统(相当于存储带的预先输入);问题五:什么是函数式编程思维 回答都有跑题,show概念之嫌,题主问的是函数式思维,这个问题我一直在思考,毕竟是方法论,能力有限,只能从切身实践告诉你
1.表达式化
在
最初的时候,需要转变观念,去可变量,去循环,把命令式改成表达式,注意,这只是把你丢在荒山野岭让你感受一下,离开熟悉的环境,地球依然在转,但是有个
重点,那就是一切都是表达式; 为什么是表达式呢?这个问题就像为什么鱼在水里?
因为函数式建立在lambda演算之上而非图灵机,只不过两者被证明等价,所以你可以在你的机器上跑全是表达式的代码,就如有人证明天空适合鱼生存,所以
鱼可以在天上游
当你接受了鱼可以在天上游之后,就该上正餐了
1.5 数据与行为分离
这也是和面向对象不一致的地方,面向对象强调数据与行为绑定,但函数式不是,确切的说函数式 函数与数据等价,所以你才可以将函数当参数与返回值,你在设计时,切勿让数据自己长腿能跑,其次,行为必须消除副作用,不可以偷偷把数据改了,习惯第一条后,应该不会的
2.高阶逻辑
用
了函数式,就不要在想循环,赋值这些低阶逻辑了,而应该更高阶的思考问题,这比转化表达式更难,函数式又叫声明式,也就是你要做什么,只要说一下就行,而
非写个遍历,做个状态判断,用函数式你不需要考虑这些,你不知道函数式的列表是怎么遍历的,中间向两边?
从后往前?这也是为何函数式适合并发的原因之一,你想知道列表中大于3的数有多少,只要,list.count(_ > 3)
而不是写循环,你可以直接写你的业务,不要拘泥于细节,有点像sql, 你需要什么告诉电脑就行,你或许会问,count foreach filter
这些函数怎么来的? 因为有了他们你才不需要写循环,他们把你留在高阶逻辑中,这个问题的答案请看下面
3.组合子逻辑 或又叫 自底向上的设计
函
数式和OO是反的,面向对象是自顶向下的设计,函数式是自底向上的设计,也就是先定义最基本的操作,然后不断组合,不断堆积以满足你的所有需要,如sql
定义了select, from, where...这几个组合子,来满足你的查询需求,同理函数式语言会提供foreach,
map等组合子(操作)来满足你的需求,所以你必须自下而上的设计你的代码结构,并且满足你的需求,当你只用组合子写代码时,你会发现你写的全是高阶逻辑
如
果这些已有组合子满足不了你,你就得自己写,foreach不行,你就自己写递归,我告诉你,递归背后也是组合子,这里一些'大神'应该不知道,在图灵机
里,递归就是方法不断调用自己没什么好说的,但是在lambda演算中,匿名函数是没法调用自己的,所以递归是用Y组合子(又叫不动点组合子)把递归函数
自己求解出来再调用的,这才可以实现递归,并与图灵机的循环等价,有点跑题了,总之要想顺手的写函数式,最好用面向组合子的设计,注意,不是必须,组合子
演算和lambda演算可以相互转化,也就是,你完全可以写一堆杂乱的表达式,但没有组合子逻辑来得清爽,Haskell大规模使用monad这个特殊组
合子,始其变得统一整洁
好了,总结一下
函数式思维,其实就是组合子逻辑,用简单的几个函数组合来构建复杂逻辑,始终以高阶的角度去表达问题,而非依赖副作用。
知道这点,你用java也可以写函数式代码了
但是,这也只是本人积累得来的感悟,绝不敢大肆伸张这就是函数式,我也在不断研究中,如有问题,还望大神指正...余下全文>>问题六:简介一下冯诺依曼机与图灵机 冯诺依曼机是物理学家假象的一种完美的复制机器,具体原理如下:机器本身会完全复制一个与自己一样的机器,然后将复制的那台发送出去,然后被发送的复制品会继续复制,然后继续发射,重复以上过程,那么整个群体会以几何群体的数量递增,如果真的发明了话,对帮助人类探索宇宙有极大的好处.图灵机的概念来源与图灵测试,简单的说就是判别在互联网上与你对话的是人还是智能程序,该测试会尽量发送复杂的语句,然后从反应中来判别是是还是智能程序,若通过了图灵测试,意味着是真人或者该智能程序非常成功问题七:从图灵机的角度来看,什么是可计算的,什么是不可计算的 非学科题问题八:图灵机的工作原理 10分普适图灵机的概念。虽然其细节是复杂的,但是它背后的原则并不十分复杂。它的基本思想是把任意一台图灵机T的指令的表编码成在磁带上表示成0和1的串。然后这段磁带被当作某一台特殊的被称作普适图灵机U的输入的开始部分,接着这台机器正如T所要进行的那样,作用于输入的余下部分。普适图灵机是万有的模仿者。“磁带”的开始部分赋予该普适机器U需要用以准确模拟任何给定机器T的全部信息!
为了了解这是如何进行的,我们首先需要一种给图灵机编号的系统方式。考虑定义某个特殊的,譬如讲在前面描述的图灵机的一个指令表。我们必须按照某种准确的方案把这表编码成0和1的串。我们可借助于以前采用的“收缩”步骤来办到。因为,如果我们用数2,3,4,5和6来分别代表符号R、L、STOP、箭头(→)以及逗点,那么我们就可以用110、1110、11110、111110以及1111110的收缩把它们编码。这样,出现在该表中的这些符号实际的串可以采用分别被编码成0和10的位数0和1。由于在该图灵机的表中,在二进位计数的结尾大写的数的位置足以把大写的0和1从其他小写的阿拉伯数字中区分开来,所以我们不需要用不同的记号。这样,1101将被读成二进位数1101,而在磁带上被编码成1010010。特别是,00读作00,它可毫不含糊地被编码成0,或者作为被完全省略的符号。实际上我们可以不必对任何箭头或任何在它紧前头的符号进行编码,而依靠指令的数字顺序去标明哪些符号必须是什么。尽管在采用这个步骤时,在必要之处要提供一些额外的“哑”指令,以保证在这个顺序中没有缝隙。这样的做法具有相当好的经济性。(例如,图灵机XN+1没有告诉我们对1100要做什么的命令,这是因为这条指令在机器运行时从不发生,所以我们应该插入一条“哑”指令,譬如讲1100→00R,它可合并到表中而不改变任何东西。类似地,我们应该把101→00R插入到XN×2中去。)若没有这些“哑的”,表中后面的指令的编码就会被糟蹋了。因为在结尾处的符号L或R足以把一条指令和另一条隔开,所以我们在每一指令中实际不需要逗号。因此,我们采用下面的编码:
0表示0或0,10表示1或1,110表示R,1110表示L,11110表示stop。
作为一个例子,让我们为图灵机XN+1编码(插入指令1100→00R)。在去掉箭头和在它们紧前面的位数以及逗号之后,我们得到
00R 11R 00R 101R 110L 101R 01STOP
1000L 1011L 1001L1100R101R00R1111R
111R 1110R
为了和早先说的相一致,我们可以去掉每一个00,并把每一个01简单地用1来取代,这样得到
R11RR101R110L101R1STOP1000L1011L1
001L1100R101RR1111R111R1110R
如下是在磁带上的相应的码:
11010101101101001011010100111010010110101111010000111010010101110100010111010100011010010110110101010101101010101101010100110
我们总是可以把开始的110(以及它之前的无限的空白磁带)删去。由于它表示00R,这代表开头的指令00→00R。而我已隐含地把它当作所有图灵机共有的。这样仪器可从磁带记号左边任意远的地方向右跑到第一个记号为止。而且,由于所有图灵机都应该把它们的描述用最后的110结束(因为它们所有都用R、L或STOP来结束),所以我们也可把它(以及......余下全文>>
在
最初的时候,需要转变观念,去可变量,去循环,把命令式改成表达式,注意,这只是把你丢在荒山野岭让你感受一下,离开熟悉的环境,地球依然在转,但是有个
重点,那就是一切都是表达式; 为什么是表达式呢?这个问题就像为什么鱼在水里?
因为函数式建立在lambda演算之上而非图灵机,只不过两者被证明等价,所以你可以在你的机器上跑全是表达式的代码,就如有人证明天空适合鱼生存,所以
鱼可以在天上游
当你接受了鱼可以在天上游之后,就该上正餐了
1.5 数据与行为分离
这也是和面向对象不一致的地方,面向对象强调数据与行为绑定,但函数式不是,确切的说函数式 函数与数据等价,所以你才可以将函数当参数与返回值,你在设计时,切勿让数据自己长腿能跑,其次,行为必须消除副作用,不可以偷偷把数据改了,习惯第一条后,应该不会的
2.高阶逻辑
用
了函数式,就不要在想循环,赋值这些低阶逻辑了,而应该更高阶的思考问题,这比转化表达式更难,函数式又叫声明式,也就是你要做什么,只要说一下就行,而
非写个遍历,做个状态判断,用函数式你不需要考虑这些,你不知道函数式的列表是怎么遍历的,中间向两边?
从后往前?这也是为何函数式适合并发的原因之一,你想知道列表中大于3的数有多少,只要,list.count(_ > 3)
而不是写循环,你可以直接写你的业务,不要拘泥于细节,有点像sql, 你需要什么告诉电脑就行,你或许会问,count foreach filter
这些函数怎么来的? 因为有了他们你才不需要写循环,他们把你留在高阶逻辑中,这个问题的答案请看下面
3.组合子逻辑 或又叫 自底向上的设计
函
数式和OO是反的,面向对象是自顶向下的设计,函数式是自底向上的设计,也就是先定义最基本的操作,然后不断组合,不断堆积以满足你的所有需要,如sql
定义了select, from, where...这几个组合子,来满足你的查询需求,同理函数式语言会提供foreach,
map等组合子(操作)来满足你的需求,所以你必须自下而上的设计你的代码结构,并且满足你的需求,当你只用组合子写代码时,你会发现你写的全是高阶逻辑
如
果这些已有组合子满足不了你,你就得自己写,foreach不行,你就自己写递归,我告诉你,递归背后也是组合子,这里一些'大神'应该不知道,在图灵机
里,递归就是方法不断调用自己没什么好说的,但是在lambda演算中,匿名函数是没法调用自己的,所以递归是用Y组合子(又叫不动点组合子)把递归函数
自己求解出来再调用的,这才可以实现递归,并与图灵机的循环等价,有点跑题了,总之要想顺手的写函数式,最好用面向组合子的设计,注意,不是必须,组合子
演算和lambda演算可以相互转化,也就是,你完全可以写一堆杂乱的表达式,但没有组合子逻辑来得清爽,Haskell大规模使用monad这个特殊组
合子,始其变得统一整洁
好了,总结一下
函数式思维,其实就是组合子逻辑,用简单的几个函数组合来构建复杂逻辑,始终以高阶的角度去表达问题,而非依赖副作用。
知道这点,你用java也可以写函数式代码了问题三:什么是图灵机? 图灵机,又称图灵计算、图灵计算机,是由数学家阿兰·麦席森·图灵(1912~1954)提出的一种抽象计算模型,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的机器替代人们进行数学运算。
所谓的图灵机就是指一个抽象的机器,它有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。在每个时刻,机器头都要从当前纸带上读入一个方格信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动。
阿兰·麦席森·图灵是英国数学家、被称为计算机科学之父
阿兰·麦席森·图灵(Alan Turing,也被译作阿兰-图林)生平简介:
1912年6月23日,出生于英国伦敦。
1931年-1934年,在英国剑桥大学国王学院(King's College)学习。
1932年-1935年,主要研究量子力学、概率论和逻辑学。
1935年,年仅23岁的图灵,被选为剑桥大学国王学院院士。
1936年,主要研究可计算理论,并提出“图灵机”的构想。
1936年-1938年,主要在美国普林斯顿大学做博士研究,涉及逻辑学、代数和数论等领域。
1938-1939年,返回剑桥从事研究工作,并应邀加入英国政府破译二战德军密码的工作。
1940年-1942年,作为主要参与者和贡献者之一,在破译纳粹德国通讯密码的工作上成就杰出,并成功破译了德军U-潜艇密码,为扭转二战盟军的大西洋战场战局立下汗马功劳。 1943年-1945年,担任英美密码破译部门的总顾问。
1945年,应邀在英国国家物理实验室从事计算机理论研究工作。
1946年,这个时候,图灵在计算机和程序设计原始理论上的构思和成果,已经确定了他的理论开创者的地位。由于图灵的杰出贡献,年轻的他被英国皇室授予OBE爵士勋衔。
1947年-1948年,主要从事计算机程序理论的研究,并同时在神经网络和人工智能领域做出开创性的理论研究。
1948年,应邀加入英国曼彻斯特大学从事研究工作,担任曼彻斯特大学计算实验室副主任。
1949年,成为世界上第一位把计算机实际用于数学研究的科学家。
1950年,发表论文“计算机器与智能”,为后来的人工智能科学提供了开创性的构思。提出著名的“图灵测试”理论。
1951年,从事生物的非线性理论研究。年仅39岁的图林,被选为英国皇家学会会员。
1952年,在当年保守愚昧和冷战的时代,当警察得知图灵与同性朋友密切交往的消息之后,同性恋倾向的图灵被逮捕入狱。在法庭审判过程中,图灵明确告知人们,他认为自己没有做错什么事。在那个观念落后的年代,为了避免被判刑入狱,图灵被迫选择了为期一年的雌性激素注射的所谓“治疗”,才得以重新返回研究工作。
1953年-1954年,继续在生物和物理学等方面的研究。被迫承受的对同性恋倾向的“治疗”,致使原本热爱体育运动的图灵在身心上受到极大的伤害。
1954年6月7日,图灵被发现死于家中的床上。死因是氰化物中毒,警方调查结论是自杀。一代英灵,就此过早离去,成为人类科学史上的一大遗憾。
阿兰-图灵(Alan Turing,也被译作阿兰-图林)生平简介:
1912年6月23日,出生于英国伦敦。
1931年-1934年,在英国剑桥大学国王学院(King's College)学习。
1932年-1935年,主要研究量子力学、概率论和......余下全文>>问题四:图灵机与现代计算机的关系 图灵机的意义与思想内涵:
图灵提出图灵机的模型并不是为了同时给出计算机的设计,它的意义我认为有如下几点:
1、 它证明了通用计算理论,肯定了计算机实现的可能性,同时它给出了计算机应有的主要架构;
2、 图灵机模型引入了读写与算法与程序语言的概念,极大的突破了过去的计算机器的设计理念;
3、 图灵机模型理论是计算学科最核心的理论,因为计算机的极限计算能力就是通用图灵机的计算能力,很多问题可以转化到图灵机这个简单的模型来考虑。
对图灵机给出如此高的评价并不是高估,因为从它的设计与运行中,我们可以看到其中蕴涵的很深邃的思想。
通用图灵机等于向我们展示这样一个过程:程序和其输入可以先保存到存储带上,图灵机就按程序一步一步运行直到给出结果,结果也保存在存储带上。
另外,我们可以隐约看到现代计算机主要构成(其实就是冯诺依曼理论的主要构成),存储器(相当于存储带),中央处理器(控制器及其状态,并且其字母表可以仅有0和1两个符号),IO系统(相当于存储带的预先输入);问题五:什么是函数式编程思维 回答都有跑题,show概念之嫌,题主问的是函数式思维,这个问题我一直在思考,毕竟是方法论,能力有限,只能从切身实践告诉你
1.表达式化
在
最初的时候,需要转变观念,去可变量,去循环,把命令式改成表达式,注意,这只是把你丢在荒山野岭让你感受一下,离开熟悉的环境,地球依然在转,但是有个
重点,那就是一切都是表达式; 为什么是表达式呢?这个问题就像为什么鱼在水里?
因为函数式建立在lambda演算之上而非图灵机,只不过两者被证明等价,所以你可以在你的机器上跑全是表达式的代码,就如有人证明天空适合鱼生存,所以
鱼可以在天上游
当你接受了鱼可以在天上游之后,就该上正餐了
1.5 数据与行为分离
这也是和面向对象不一致的地方,面向对象强调数据与行为绑定,但函数式不是,确切的说函数式 函数与数据等价,所以你才可以将函数当参数与返回值,你在设计时,切勿让数据自己长腿能跑,其次,行为必须消除副作用,不可以偷偷把数据改了,习惯第一条后,应该不会的
2.高阶逻辑
用
了函数式,就不要在想循环,赋值这些低阶逻辑了,而应该更高阶的思考问题,这比转化表达式更难,函数式又叫声明式,也就是你要做什么,只要说一下就行,而
非写个遍历,做个状态判断,用函数式你不需要考虑这些,你不知道函数式的列表是怎么遍历的,中间向两边?
从后往前?这也是为何函数式适合并发的原因之一,你想知道列表中大于3的数有多少,只要,list.count(_ > 3)
而不是写循环,你可以直接写你的业务,不要拘泥于细节,有点像sql, 你需要什么告诉电脑就行,你或许会问,count foreach filter
这些函数怎么来的? 因为有了他们你才不需要写循环,他们把你留在高阶逻辑中,这个问题的答案请看下面
3.组合子逻辑 或又叫 自底向上的设计
函
数式和OO是反的,面向对象是自顶向下的设计,函数式是自底向上的设计,也就是先定义最基本的操作,然后不断组合,不断堆积以满足你的所有需要,如sql
定义了select, from, where...这几个组合子,来满足你的查询需求,同理函数式语言会提供foreach,
map等组合子(操作)来满足你的需求,所以你必须自下而上的设计你的代码结构,并且满足你的需求,当你只用组合子写代码时,你会发现你写的全是高阶逻辑
如
果这些已有组合子满足不了你,你就得自己写,foreach不行,你就自己写递归,我告诉你,递归背后也是组合子,这里一些'大神'应该不知道,在图灵机
里,递归就是方法不断调用自己没什么好说的,但是在lambda演算中,匿名函数是没法调用自己的,所以递归是用Y组合子(又叫不动点组合子)把递归函数
自己求解出来再调用的,这才可以实现递归,并与图灵机的循环等价,有点跑题了,总之要想顺手的写函数式,最好用面向组合子的设计,注意,不是必须,组合子
演算和lambda演算可以相互转化,也就是,你完全可以写一堆杂乱的表达式,但没有组合子逻辑来得清爽,Haskell大规模使用monad这个特殊组
合子,始其变得统一整洁
好了,总结一下
函数式思维,其实就是组合子逻辑,用简单的几个函数组合来构建复杂逻辑,始终以高阶的角度去表达问题,而非依赖副作用。
知道这点,你用java也可以写函数式代码了
但是,这也只是本人积累得来的感悟,绝不敢大肆伸张这就是函数式,我也在不断研究中,如有问题,还望大神指正...余下全文>>问题六:简介一下冯诺依曼机与图灵机 冯诺依曼机是物理学家假象的一种完美的复制机器,具体原理如下:机器本身会完全复制一个与自己一样的机器,然后将复制的那台发送出去,然后被发送的复制品会继续复制,然后继续发射,重复以上过程,那么整个群体会以几何群体的数量递增,如果真的发明了话,对帮助人类探索宇宙有极大的好处.图灵机的概念来源与图灵测试,简单的说就是判别在互联网上与你对话的是人还是智能程序,该测试会尽量发送复杂的语句,然后从反应中来判别是是还是智能程序,若通过了图灵测试,意味着是真人或者该智能程序非常成功问题七:从图灵机的角度来看,什么是可计算的,什么是不可计算的 非学科题问题八:图灵机的工作原理 10分普适图灵机的概念。虽然其细节是复杂的,但是它背后的原则并不十分复杂。它的基本思想是把任意一台图灵机T的指令的表编码成在磁带上表示成0和1的串。然后这段磁带被当作某一台特殊的被称作普适图灵机U的输入的开始部分,接着这台机器正如T所要进行的那样,作用于输入的余下部分。普适图灵机是万有的模仿者。“磁带”的开始部分赋予该普适机器U需要用以准确模拟任何给定机器T的全部信息!
为了了解这是如何进行的,我们首先需要一种给图灵机编号的系统方式。考虑定义某个特殊的,譬如讲在前面描述的图灵机的一个指令表。我们必须按照某种准确的方案把这表编码成0和1的串。我们可借助于以前采用的“收缩”步骤来办到。因为,如果我们用数2,3,4,5和6来分别代表符号R、L、STOP、箭头(→)以及逗点,那么我们就可以用110、1110、11110、111110以及1111110的收缩把它们编码。这样,出现在该表中的这些符号实际的串可以采用分别被编码成0和10的位数0和1。由于在该图灵机的表中,在二进位计数的结尾大写的数的位置足以把大写的0和1从其他小写的阿拉伯数字中区分开来,所以我们不需要用不同的记号。这样,1101将被读成二进位数1101,而在磁带上被编码成1010010。特别是,00读作00,它可毫不含糊地被编码成0,或者作为被完全省略的符号。实际上我们可以不必对任何箭头或任何在它紧前头的符号进行编码,而依靠指令的数字顺序去标明哪些符号必须是什么。尽管在采用这个步骤时,在必要之处要提供一些额外的“哑”指令,以保证在这个顺序中没有缝隙。这样的做法具有相当好的经济性。(例如,图灵机XN+1没有告诉我们对1100要做什么的命令,这是因为这条指令在机器运行时从不发生,所以我们应该插入一条“哑”指令,譬如讲1100→00R,它可合并到表中而不改变任何东西。类似地,我们应该把101→00R插入到XN×2中去。)若没有这些“哑的”,表中后面的指令的编码就会被糟蹋了。因为在结尾处的符号L或R足以把一条指令和另一条隔开,所以我们在每一指令中实际不需要逗号。因此,我们采用下面的编码:
0表示0或0,10表示1或1,110表示R,1110表示L,11110表示stop。
作为一个例子,让我们为图灵机XN+1编码(插入指令1100→00R)。在去掉箭头和在它们紧前面的位数以及逗号之后,我们得到
00R 11R 00R 101R 110L 101R 01STOP
1000L 1011L 1001L1100R101R00R1111R
111R 1110R
为了和早先说的相一致,我们可以去掉每一个00,并把每一个01简单地用1来取代,这样得到
R11RR101R110L101R1STOP1000L1011L1
001L1100R101RR1111R111R1110R
如下是在磁带上的相应的码:
11010101101101001011010100111010010110101111010000111010010101110100010111010100011010010110110101010101101010101101010100110
我们总是可以把开始的110(以及它之前的无限的空白磁带)删去。由于它表示00R,这代表开头的指令00→00R。而我已隐含地把它当作所有图灵机共有的。这样仪器可从磁带记号左边任意远的地方向右跑到第一个记号为止。而且,由于所有图灵机都应该把它们的描述用最后的110结束(因为它们所有都用R、L或STOP来结束),所以我们也可把它(以及......余下全文>>
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯