Java Web作业

本文探讨了可计算性理论的基础,通过图灵机和Lambda演算来解释可计算问题。接着,文章介绍了三种主要的编程范式:命令式编程、函数式编程和逻辑式编程。重点阐述了函数式编程的特点,如纯函数、不可变性和表达式。还讨论了函数式编程的优势,如简化开发、并行处理和代码复用。此外,文章还简要提到了HTTP协议的工作原理、TCP/IP的三次握手过程以及版本控制系统Git的重要性。
摘要由CSDN通过智能技术生成

可计算性:
假设有一个纸带和一个打孔机,然后有一套指令,能够控制打孔机在纸带上移动、能够读取当前位置是否打了孔、能够在当前位置打一个孔,这就是一个图灵机(by阿兰.图灵),假设一个问题能够靠这个纸带+打孔机+指令的方式解决,那就说明这个问题是“可计算的”。

用函数组合的方式来描述计算过程,这就是Lambda演算(by阿隆佐·邱奇),假设一个问题能够用一套函数组合的算法来表达,那就说明这个问题是可计算的。

编程范式:
命令式编程(Imperative Programming): 专注于”如何去做”,这样不管”做什么”,都会按照你的命令去做。解决某一问题的具体算法实现。按图灵机方式运作,为冯诺依曼式计算机设计
函数式编程(Functional Programming):把运算过程尽量写成一系列嵌套的函数调用。按Lambda演算方式运作,为非冯诺依曼计算机设计
逻辑式编程(Logical Programming):它设定答案须符合的规则来解决问题,而非设定步骤来解决问题。过程是事实+规则=结果。


函数式编程:
将计算描述为一种表达式求值。
在狭义上,函数式编程意味着没有可变变量,赋值,循环和其他的命令式控制结构。即,纯函数式编程语言。
    Pure Lisp, XSLT, XPath, XQuery, FP
    Haskell (without I/O Monad or UnsafPerformIO)

在广义上,函数式编程意味着专注于函数

    Lisp, Scheme, Racket, Clojure
    SML, Ocaml, F#
    Haskell (full language)
    Scala
    Smalltalk, Ruby
函数:
不是指命令式编程中的函数(我们可以认为C++程序中的函数本质是一段子程序Subroutine),而是指数学中的函数,即自变量的映射(一种东西和另一种东西之间的对应关系)。也就是说,一个函数的值仅决定于函数参数的值,不依赖其他状态。
在函数式语言中,函数被称为一等函数(First-class function),与其他数据类型一样,作为一等公民,处于平等地位,可以在任何地方定义,在函数内或函数外;可以赋值给其他变量;可以作为参数,传入另一个函数,或者作为别的函数的返回值。
纯函数:
 不依赖外部状态:相同的输入,永远会得到相同的输出
 不改变外部状态:没有任何可观察的副作用。
变量
不是指命令式编程语言中的变量(存储状态的内存单元),而是数学代数中的变量,即一个值的名称。
变量的值是不可变的(immutable),即不可多次赋值
表达式和语句
表达式(expression):一个单纯的运算过程,总是有返回值
语句(statement):执行某种操作(更多的是逻辑语句),没有返回值。
严格意义上,函数式编程要求只使用表达式,不使用语句。命令式编程语言中的控制语句在函数式编程中也是表达式。但只有纯函数式编程语言才完全符合要求。
状态:
命令式编程的状态就是图灵机的纸带,包括了当前定义的全部变量,以及一些当前系统的状态,比如打开的文件、网络的连接、申请的内存等等。
函数式编程强调无状态,不是不保存状态,而是强调将状态锁定在函数的内部,不依赖于外部的任何状态。更准确一点,它是通过函数创建新的参数或返回值来保存程序的状态的。

每个叠加函数的参数或返回结果表示程序的一个中间状态

流行原因
简单:加快了开发的速度
并行:在编程过程中无需修改代码程序就可并发执行,且运行期间不会产生死锁
函数:可复用
单元测试,代码热部署,易于管理:不依

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值