Lean 语言参考手册

21. IO🔗

Lean 是一种纯函数式编程语言。 Lean 代码在运行时采用严格求值;然而,类型检查所用的求值顺序——尤其是检查定义相等时——在形式上并未指定,而是依赖多种可提升性能但可能变化的启发式方法。 这意味着,如果直接加入执行副作用的操作(例如文件 I/O、异常或可变引用),程序中的副作用顺序将无法确定。 类型检查期间,连含有自由变量的项也会被归约;这会使副作用更加难以预测。 最后,Lean 逻辑的一项基本原则是:函数确实是函数,即把定义域中的每个元素映射到值域中的唯一元素。 若纳入控制台 I/O、任意可变状态或随机数生成等副作用,就会违反这一原则。

可能产生副作用的程序具有一种类型(通常为 IO α),以便与纯函数区分。 从逻辑上说,IO 描述副作用的先后次序与数据依赖关系。 从 Lean 逻辑的角度看,许多基本副作用(例如读取文件)是不透明常量。 另一些则由逻辑上等价于运行时版本的代码来规定。 在运行时,精译器会生成普通代码。

  1. 21.1. 逻辑模型
  2. 21.2. 控制结构
  3. 21.3. 控制台输出
  4. 21.4. 可变引用
  5. 21.5. 文件、文件句柄与流
  6. 21.6. 系统与平台信息
  7. 21.7. 环境变量
  8. 21.8. 计时
  9. 21.9. 进程
  10. 21.10. 随机数
  11. 21.11. 任务与线程