LSR 017 - 区间类型规范¶
基本信息¶
LSR 编号 017
标题 区间类型规范
作者 Ziyang-Bai
状态 草案
类型 标准规范
创建日期 08-21-2026
归属项目 编译器、标准库、CAS
摘要¶
定义 Lamina 的 interval<T> 类型、四个标准库构造函数、端点开闭性、类型统一、成员判断和符号表达式语义。区间通过普通函数调用构造,元组和数组继续使用各自的字面量语法。
技术规范¶
1. 区间类型¶
interval<T> 表示由下界、上界和两个端点的开闭标志组成的有界区间。
let unit interval<int> = std.interval_closed(0, 1)
let domain interval<real> = std.interval_open_closed(0.0, 1.0)
T提供区间成员判断所需的顺序比较两个端点的类型统一为同一
T数值端点按核心数值塔规则统一
带量纲端点具有相同维度,并在比较前换算到统一尺度
区间值创建后保持端点值和开闭标志不变
2. 构造函数¶
std 模块提供四个区间构造函数。
函数 |
含义 |
|---|---|
|
闭区间,包含两个端点 |
|
开区间,不包含两个端点 |
|
包含下界,不包含上界 |
|
不包含下界,包含上界 |
四个构造函数具有下列泛型签名:
func interval_closed<T>(lower T, upper T) -> interval<T>
func interval_open<T>(lower T, upper T) -> interval<T>
func interval_closed_open<T>(lower T, upper T) -> interval<T>
func interval_open_closed<T>(lower T, upper T) -> interval<T>
两个端点表达式按源码从左到右各求值一次。
3. 表面语法¶
区间构造采用普通的限定名函数调用语法 [1]。
源码 |
语法含义 |
|---|---|
|
二元素元组 [2] |
|
二元素数组 |
|
两实参函数调用 |
|
开区间构造函数调用 |
interval_closed、interval_open、interval_closed_open 和 interval_open_closed 是 std 模块的标准导出名。通过 use std.{interval_closed, interval_open, interval_closed_open, interval_open_closed} 导入后可以省略 std. 前缀。
4. 边界与空区间¶
下界小于上界时,区间按构造函数指定的开闭性确定成员
下界等于上界且由
interval_closed构造时,区间只包含该端点下界等于上界且至少一端开放时,区间为空
下界大于上界时产生
IntervalBoundsReversed
空区间保留构造时推导出的 interval<T> 类型。
5. 成员判断¶
in 和 not in 判断值是否位于区间内。
0 in std.interval_closed(0, 1) # true
0 in std.interval_open_closed(0, 1) # false
1 not in std.interval_closed_open(0, 1) # true
左操作数类型可赋给区间的元素类型
T闭端点使用包含相等的比较
开端点使用严格比较
普通值的成员判断返回
bool
6. 相等性与哈希¶
区间相等采用结构语义。
元素类型、下界、上界和两个开闭标志均相同时,两个区间相等
端点均可相等比较时,区间支持
==端点均可哈希时,区间支持哈希
7. 与序列和集合的关系¶
类型或函数 |
语义 |
|---|---|
|
由两个端点限定的范围 |
|
按标准库规则生成的序列 |
|
有限、已枚举、无序且去重的值集合 |
8. Expr 与符号区间¶
任一端点为 Expr,或上下文显式期望 Expr 时,区间构造函数产生符号区间表达式 [5]。
sym x
let numeric = std.interval_closed(0, 1) # interval<int>
let symbolic = std.interval_closed_open(0, x) # Expr
let forced Expr = std.interval_open(0, 1) # Expr
可提升端点逐个提升为
Expr符号区间成员判断产生关系表达式
符号端点的顺序由 CAS 判定
9. 诊断¶
实现至少区分下列错误:
IntervalArityMismatch:构造函数的端点数量错误IntervalBoundTypeMismatch:端点类型无法统一IntervalBoundNotOrdered:端点类型缺少所需顺序比较IntervalBoundsReversed:可判定的下界大于上界IntervalMembershipTypeMismatch:待判断值与端点类型不兼容
错误名称可以映射到实现的统一诊断系统。
10. 语法迁移¶
原区间写法 |
标准构造函数 |
|---|---|
|
|
|
|
|
|
|
|