LSR 010 - Lamina 虚数扩展

基本信息

  • LSR 编号: 010
  • 标题: Lamina 虚数扩展
  • 作者: Ziyang-Bai
  • 状态: 接受
  • 类型: 标准规范
  • 创建日期: 09-19-2025
  • Lamina 版本: 悬而未决

摘要

本 LSR 定义 Lamina 编程语言对虚数的支持,包括数据类型、运算规则、函数接口以及与已有数字类型(intfloatrationalirrational)的兼容性。任何 Lamina 实现若支持虚数功能,必须遵守本规范以保证语言一致性。


技术规范

1. 数据类型

1.1 虚数类型

  • 类型名: complex
  • 描述: 用于表示复数 $a + bi$,其中 ab 可以是任意 Lamina 数值类型(intfloatrationalirrational
  • 示例:
var z1 = 3 + 4i;        // a=3, b=4
var z2 = 1/2 + √2*i;    // a=rational(1/2), b=irrational(√2)
var z3 = 0 + 1i;        // 纯虚数
var z4 = 5;             // 自动视为 5 + 0i

1.2 行为规范

  • 所有复数运算保持符号化和精确性:

  • 有理数部分保持约分

  • 无理数部分保持符号化
  • complex 支持任意精度 int 及符号化 rational / irrational

2. 运算符与优先级

2.1 算术运算

运算符 描述 示例
+ 复数加法 (3+4i) + (1+2i) = 4+6i
- 复数减法 (3+4i) - (1+2i) = 2+2i
* 复数乘法 (3+4i) * (1+2i) = -5+10i
/ 复数除法 (3+4i) / (1+2i) = 11/5 - 2/5i
^ 幂运算 (1+i)^2 = 2i
! 阶乘(仅允许非负整数实部,虚部必须为 0)

2.2 函数接口

函数 描述 示例
abs(z) 复数模 abs(3+4i) = 5
arg(z) 幅角(弧度) arg(1+i) = π/4
conj(z) 共轭复数 conj(3+4i) = 3-4i
re(z) 实部 re(3+4i) = 3
im(z) 虚部 im(3+4i) = 4
exp(z) 指数函数 exp(iπ) = -1
log(z) 对数 log(1+i) = ln(√2) + iπ/4
sqrt(z) 平方根 sqrt(-1) = i

注意:符号化无理数运算应保持精确,例 sqrt(-4) 结果为 2i 而非近似浮点。


3. 类型转换与兼容性

  • 数值类型可自动提升为 complex
var x = 3;       // int
var y = x + 2i;  // 自动提升 x 为 3+0i
  • complexrationalirrational 运算保持符号化:
var z = 1/2 + √2*i; // 精确表示
  • 不允许虚数参与逻辑运算(and, or)或比较(<, >)

4. 错误处理

  • 非法操作抛出 TypeErrorRuntimeError
var z = 3+4i;
var w = z and true; // TypeError
var r = z < 2;     // TypeError
  • 阶乘仅允许实部为非负整数,虚部为 0,否则报 RuntimeError

  • 栈追踪保持 LSR-000 格式,包括文件名、行号、调用链


5. 示例

var z1 = 3 + 4i;
var z2 = 1/2 + √2*i;

print(abs(z1));  // 5
print(arg(z2));  // 弧度符号化表示
print(conj(z1)); // 3-4i

var z3 = z1 * z2; // 精确复数乘法
var z4 = sqrt(-9); // 3i

var x = 2;
var z5 = x + 5i;  // 自动提升为 2+5i