在混沌纷繁的尘世中寻找真正想要的是什么
速通Lambda 演算形式系统语法和概念

“【】”符号内是个人注解,一般是总结、释义等等


  1. 定义与历史
    • λ演算,由阿隆佐·邱奇(Alonzo Church)创立,是一种形式系统,用于研究函数定义、函数应用和递归等。
    • 它表达了最小的编程语言概念,虽然没有传统编程语言中的数字、字符串或布尔值,但能够表达任何可计算的函数。
    • 【λ演算是最基础的编程模型,虽然简单,但足以表达所有计算过程。】
  2. 基本组成
    • 变量(Variables):形如 x 的标识符,用于表示参数或数值。
    • 函数(Functions):形如 λx.M,其中 x 是参数,M 是函数体。
    • 应用(Applications):形如 **(M N)**,表示函数 M 应用于输入 **N**。
    • 【变量是存储信息的标识符;函数定义了如何处理输入数据;应用是将函数作用于数据的过程。】

基本概念:

  1. 变量
    • 表示形式:**xyz** 等。
    • 角色:在表达式中用作占位符或具体值。
    • 【变量就像是空盒子,可以放入任何数据。】
  2. 函数
    • 定义形式:**λx.M,其中 x 是参数,M** 是函数体。
    • 例子:**λx.x** 是恒等函数,返回其输入值。
    • 【函数在这里不是传统意义上的函数,而是一个数据转换规则。】
  3. 应用
    • 表示形式:**(M N),其中 M 是函数,N** 是函数的输入。
    • 操作:将函数 M 应用于输入 **N**。
    • 【应用是将规则(函数)用在具体数据(变量)上的过程,得到结果。】

相关概念的重要性质:

  1. 自由变量与约束变量
    • 约束变量:在函数定义中出现,如在 λx.x 中的 **x**。
    • 自由变量:在函数体中出现但未在参数列表中定义,如 λx.y 中的 **y**。
    • 【约束变量是函数内部使用和控制的;自由变量是从外部环境中来的,函数内部无法控制。】
  2. β-归约(β-Reduction):
    • 操作:替换函数体中的所有实例,例如 **(λx.x) a → a**。
    • 目的:实现函数的应用,是λ演算的核心计算规则。
    • 【β-归约是函数计算的过程,通过替换来简化表达式,最终得到结果。】

函数的一些常见用法的实现示例与求值:

  1. 恒等函数
    • **λx.x**:对任何输入 **x**,总返回 **x**。
    • 【恒等函数就像一个回声,你对它说什么,它就回应什么。】
  2. 布尔逻辑
    • TRUE 表示为 **λx.λy.x**,选择第一个参数。
    • FALSE 表示为 **λx.λy.y**,选择第二个参数。
    • IF 定义为 **λb.λt.λf.b t f**,根据 b 的真假选择 t 或 **f**。
    • 【在没有真和假的世界中,我们用函数来表示逻辑判断和选择。】
  3. 邱奇数编码(Church numerals):
    • 0 表示为 **λf.λx.x**,不应用函数 **f**。
    • 1 表示为 **λf.λx.f x**,应用函数 f 一次。
    • n 表示为 **λf.λx.f^n x**,应用函数 f n次。
    • 【邱奇数是用函数的应用次数来模拟数字的一种方式,非常抽象但极富创意。】

高阶函数及高阶函数的应用:

  1. 柯里化(Currying):
    • 将多参数函数转换为一系列单参数函数,例如 **λx.λy.λz.xyz**。
    • 【柯里化是一种技巧,通过转换,让函数逐个处理参数,增加了灵活性。】
  2. 逻辑操作
    • AND 定义为 **λa.λb.a b FALSE**。
    • OR 定义为 **λa.λb.a TRUE b**。
    • NOT 定义为 **λa.a FALSE TRUE**。
    • 【这些逻辑操作利用λ演算的结构来模拟电路中的逻辑门。】

组合子逻辑:

  1. SKI 组合子演算
    • 基本组合子:**IK** 和 **S**。
    • I 等价于 λx.xK 等价于 λx.λy.xS 等价于 **λx.λy.λz.x z (y z)**。
    • 【SKI 组合子是一套简化的规则系统,通过这三个基本函数,可以构建任何复杂函数。】
  2. 进一步简化
    • SK 组合子演算:使用 SKK 替代 **I**。
    • ι 组合子:进一步简化,使用一个基本的变换 ι = λf.((f S) K) 实现其他组合子。
    • 【通过进一步简化,我们探索如何用最少的基本元素表达复杂的逻辑。】
函数式编程是什么
arch Linux 安装 RDP 终极教程
© 2024 Dal
「 就在那个时刻,你记得这并非幻觉,的确就在那个时刻,那只手和那块石头的接触面,她突然回过头冲你说:我也爱着你。 」