关于函数式编程:Y-分钟速成-Lambda-Calculus
Lambda 演算Lambda 演算(lambda calculus, -calculus), 最后由阿隆佐·邱奇(Alonzo Church)提出, 是世界上最小的编程语言. 只管没有数字, 字符串, 布尔或者任何非函数的数据类型, lambda 演算仍能够示意任何图灵机. Lambda 演算由三种元素组成: 变量(variables)、函数(functions)和利用(applications)。 最根本的函数为恒等函数: x.x, 它等价于f(x) = x. 第一个"x"为函数的参数, 第二个为函数体. 自在变量和束缚变量:在函数x.x中, “x"被称作束缚变量因为它同时呈现在函数体和函数参数中在x.y中, "y"被称作自在变量因为它没有被事后申明.求值:求值操作是通过-归约(-Reduction)实现的, 它实质上是词法层面上的替换. 当对表达式(x.x)a求值时, 咱们将函数体中所有呈现的"x"替换为"a” (x.x)a计算结果为: a(x.y)a计算结果为: y你甚至能够创立高阶函数: (x.(y.x))a计算结果为: y.a只管 lambda 演算传统上仅反对单个参数的函数, 但咱们能够通过一种叫作柯里化(Currying)的技巧创立多个参数的函数 (x.y.z.xyz)等价于f(x, y, z) = ((x y) z)有时xy.<body>与x.y.<body>能够调换应用 意识到传统的 lambda 演算没有数字, 字符或者任何非函数的数据类型很重要. 布尔逻辑:在 lambda 演算中没有"真"或"假". 甚至没有 1 或 0. 作为替换: T示意为: x.y.x F示意为: x.y.y 首先, 咱们能够定义一个"if"函数btf, 它当b为真时返回t, b为假时返回f IF等价于: b.t.f.b t f 通过IF, 咱们能够定义根本的布尔逻辑运算符: a AND b等价于: ab.IF a b F a OR b等价于: ab.IF a T b ...