函数式语言中含底元素的流处理
1. 引言
流是一种实用的数据结构,常用于表达进程通信等场景,在函数式语言中易于操作。本文聚焦于布尔流,即由 0 和 1 组成的无限序列,且从左到右进行访问。在函数式语言里,通常用列表类型 [Bool]
来表示流。但该类型包含含底元素(⊥)的无限序列,若程序对这类序列进行普通流访问,会在遇到底元素时卡住,因为获取该元素值的计算不会终止,导致第一个底元素之后的部分被丢弃,即便后续序列可能包含有价值的信息。
研究发现,含底元素的流在表示连续拓扑空间(如实数集 R)以及进行相关计算时很有用。我们将最多包含 n 个底元素的无限序列称为 n⊥ - 序列,记为 $\Sigma_{\perp,n}^{\omega}$。任何 n 维可分度量空间都能拓扑嵌入到 $\Sigma_{\perp,n}^{\omega}$ 中,特别地,实数集 R 可通过格雷码嵌入拓扑嵌入到 $\Sigma_{\perp,1}^{\omega}$ 里。这意味着每个实数都有唯一的 1⊥ - 序列表示,且 $\Sigma_{\perp,1}^{\omega}$ 和 R 的近似结构一致。由于 R 是一维连通空间,而 $\Sigma^{\omega}$ 是零维完全不连通空间,所以底元素 ⊥ 的存在至关重要。
为了处理 1⊥ - 序列,引入了 IM2 - 机器,它在每个输入/输出磁带上有两个磁头,可对 1⊥ - 序列进行扩展流访问。该机器诱导的实函数可计算性概念与标准概念一致。本文旨在将 IM2 - 机器的双磁头流访问扩展到顺序计算的函数式语言中。虽然可以用逻辑编程语言自然表达 IM2 - 机器的行为,但将实函数表示为函数式编程语言中的函数更为理想,还能应用高阶函数。 </