dumate
我在考虑双轨制,即在中文语法的基础上,加上数学公式的支持,比如:定x=2*x + 1这样很多计算将更加简单方便,还就像现在的小学数学课本里面一样,比如:要求两个盘子一共多少个球,要用加法,公式是x=a+b ,这样最终嵌入的公式可能就是x=a+b 。
进而我们可以直接执行一段python代码,也就是很多已有的代码或者库都能调用,就像中文的文章里,完全可以嵌入数学公式和python代码一样。
即中文侧重于中文逻辑部分,数学和python代码侧重于计算那块。
回答
这个想法非常棒!双轨制设计有很多优势:
双轨制的优势
- 降低学习门槛 - 数学公式是通用语言,无需重新学习
- 复用 Python 生态 - 直接调用 numpy、pandas 等库
- 各司其职 - 中文负责逻辑流程,数学/Python 负责计算
- 符合直觉 - 就像教科书里中文叙述 + 数学公式
设计方案
┌─────────────────────────────────────────────────────────────┐
│ 中文轨道 │ 数学/Python 轨道 │
├─────────────────────────────────────────────────────────────┤
│ 定 面积 = 『π * r²』 │ 数学公式(中缀表达式) │
│ 定 总和 = 「sum(x for x in lst)」 │ Python 代码 │
│ 若 x 大 0 则 ... │ 中文逻辑判断 │
│ 列1 2 3,皆『x * 2』 │ 高阶函数 + 数学公式 │
└─────────────────────────────────────────────────────────────┘
语法设计
『...』 → 数学表达式(中缀,转译为 Python)
「...」 → Python 代码块(直接执行)
示例:
定 圆面积 = 『π * r ** 2』
定 数据 = 「np.array([1, 2, 3])」
列1 2 3,皆『x * x + 1』
若『x > 0 and x < 10』则印x。
八皇后示例
定 安全=函 位置 行。
『all(
位置[i] != 位置[行-1] and
abs(位置[i] - 位置[行-1]) != 行 - i
for i in range(行)
)』
。
定 求解=函 n。
「def solve(queens, row):
if row == n:
return [queens[:]]
solutions = []
for col in range(n):
queens.append(col)
if safe(queens, row):
solutions += solve(queens, row + 1)
queens.pop()
return solutions
solve([], 0)」
。
印 求解8。
要我实现这个双轨制语法吗?主要修改:
- Lexer - 识别
『』和「」包围的表达式 - Parser - 新增
MathExpr和PythonCode节点 - CodeGen - 数学公式转译,Python 代码直接嵌入
CodeArts
我在考虑双轨制,即在中文语法的基础上,加上数学公式的支持,比如:定x=2*x + 1这样很多计算将更加简单方便,还就像现在的小学数学课本里面一样,比如:要求两个盘子一共多少个球,要用加法,公式是x=a+b ,这样最终嵌入的公式可能就是x=a+b
进而我们可以直接执行一段python代码或者common lisp代码,也就是很多已有的代码或者库都能调用,就像中文的文章里,完全可以嵌入数学公式和python代码一样。
即中文侧重于中文逻辑部分,数学和python代码侧重于计算那块。
回答
这是一个很有意思的设计思路------在中文自然语言中嵌入数学公式和可执行代码,形成"中文逻辑 + 数学/代码计算"的双轨制。让我先了解一下当前项目的结构和已有实现,再给出具体建议。
Explore SubAgent: 探索项目结构和核心设计
我来全面探索这个项目。
双轨制架构
数学公式嵌入
文档中代码执行
混合渲染系统
现有的代码执行机制:
项目唯一的"代码执行"机制是同像性(Quote/Eval):
wenyanxin
Quote - 将代码作为数据
"1加2"。 # → (1 加 2) 返回AST
~"1加2"。 # → (1 加 2) 另一种Quote语法
Eval - 对AST求值
行"1加2"。 # → 3 执行引用的代码
行~"1加2"。 # → 3 另一种Eval语法
这实现了"代码即数据"的核心哲学,但不是传统意义上的"公式嵌入"或"文档中代码执行"。
转译执行管道:
code
文言心源码\] → Lexer(分词) → Parser(构建AST) → Transpiler(转译为Lisp) → SBCL(执行) → \[结果
例如:10加5,乘2。 → (* (+ 10 5) 2) → 30
总结
【文言心】 是一个中文编程语言项目,目前处于v0.4阶段,核心功能(基本运算、管道、列表、高阶函数、变量、条件、同像性)已实现。项目采用Python开发,将中文代码转译为Common Lisp执行。
关键发现:
项目有两套实现:模块化包(wenyanxin/)是早期简化版,repl.py是当前完整版(包含所有最新功能)
中文语法解析已完整实现,包括CJK字符识别、双字词/四字成语贪心匹配、中文标点处理
没有数学公式嵌入、双轨制、文档代码执行相关功能
没有构建系统,直接Python运行
v0.5递归函数因语法设计障碍暂缓,这是当前最大的功能缺口
项目文档非常丰富(20+个MD文件),但部分文档内容有重叠
🎯
现在我对项目有了全面了解。让我再看几个关键文件,深入理解当前的设计细节。
Read
Limit:130
Offset:1
现在我对项目有了深入理解。让我来分析你的双轨制思路,并给出具体的设计方案。
双轨制设计分析
你的想法非常好,本质上是:中文负责逻辑表达,数学公式/代码负责精确计算。这和小学课本的写法完全一致------先用中文说"要求两个盘子一共多少个球,要用加法",然后写公式 x = a + b。
当前文言心的现状
目前文言心已经有"中文动词吞噬"的计算方式:
code
定x为10。 → x = 10
1加2。 → 3
10加5,乘2。 → 30
但这种方式在复杂计算时确实显得笨拙,比如 2*x + 1 用纯中文写就是 2乘x加1,可读性不如数学公式。
双轨制具体设计方案
我建议分三个层次实现:
第一层:数学公式嵌入(最核心)
在中文语句中直接嵌入数学赋值和表达式,用 = 和标准数学运算符:
wenyanxin
纯中文(现有方式)
定x为10加5。 → x = 15
双轨制:中文定变量 + 数学公式赋值
定 x = 2*x + 1 → 中文"定" + 数学公式
纯数学公式(无需中文动词)
x = a + b → 直接数学赋值
混合使用
定半径为5。 → 中文定义
面积 = π * 半径² → 数学公式计算
印面积。 → 中文输出
语法设计:在Lexer中识别 = 号,当 = 出现在变量名后面时,切换到"数学模式",用标准数学运算符解析后续表达式。
第二层:Python代码块嵌入
用标记符号嵌入可执行的Python代码,类似Markdown的代码块:
wenyanxin
中文逻辑部分
定数据为列1 2 3 4 5。
要求计算平均值。
Python代码块
import statistics
result = statistics.mean([1, 2, 3, 4, 5])
印结果。 → 3
code
**语法设计**:用 ` ```python ... ```` 或更简洁的 `【py: ... 】` 标记Python代码块,Parser识别后生成 `PythonBlock` AST节点,Executor直接调用Python `exec()` 执行。
---
**第三层:Common Lisp代码块嵌入**
类似地,也可以直接嵌入Lisp代码(因为底层就是SBCL):
```wenyanxin
# 中文逻辑
定n为10。
要求计算n的阶乘。
# Lisp代码块
```lisp
(! 10)
code
---
### 实现层面的关键修改点
| 组件 | 修改内容 |
|------|---------|
| **TokenType** | 新增 `MATH_EXPR`(数学表达式)、`CODE_BLOCK`(代码块)、`ASSIGN`(等号赋值) |
| **Lexer** | 识别 `=` 号触发数学模式;识别 ` ```python/lisp ```` 代码块标记 |
| **AST** | 新增 `MathExpr` 节点、`CodeBlock` 节点(含语言类型和代码内容) |
| **Parser** | 数学表达式解析(支持 `+` `-` `*` `/` `**` `()` 等标准运算符优先级);代码块直接提取原始文本 |
| **Transpiler** | `MathExpr` → 转译为Lisp S表达式;`CodeBlock(lisp)` → 直接透传;`CodeBlock(python)` → 调用Python执行桥接 |
| **Executor** | 新增 `PythonExecutor`,通过 `subprocess` 调用Python执行代码块并获取结果 |
### 核心设计原则
1. **中文是主轨**:逻辑叙述、流程控制、数据定义用中文
2. **数学/代码是副轨**:精确计算、复杂公式、库调用用数学/代码
3. **无缝衔接**:副轨的计算结果自动回到主轨的变量空间
4. **渐进式**:用户可以纯中文写,也可以混用,不强制
---
你想先从哪一层开始实现?我建议从**第一层(数学公式嵌入)**开始,因为它是改动最小、收益最大的------只需要在Lexer中识别 `=` 和数学运算符,在Parser中增加数学表达式解析,就能让 `定 x = 2*x + 1` 这样的写法工作起来。
🎯
OpenCode
我在考虑双轨制,即在中文语法的基础上,加上数学公式的支持,比如:定x=2*x + 1这样很多计算将更加简单方便,还就像现在的小学数学课本里面一样,比如:要求两个盘子一共多少个球,要用加法,公式是x=a+b ,这样最终嵌入的公式可能就是x=a+b 。进而我们可以直接执行一段python代码,也就是很多已有的代码或者库都能调用,就像中文的文章里,完全可以嵌入数学公式和python代码一样。 即中文侧重于中文逻辑部分,数学和python代码侧重于计算那块。
OpenCode这边可能对中文的支持有限制,导致无法实现双轨制,来回用了好几次交互,都在兜圈子。