# goldfish-hack2 **Repository Path**: yinyuu/goldfish-hack2 ## Basic Information - **Project Name**: goldfish-hack2 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2026-04-02 - **Last Updated**: 2026-04-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Goldfish Calc 基于 Goldfish Scheme 的科学计算器实现。 ## 项目概述 将 kalker 计算器的核心功能移植到 Goldfish Scheme,支持数学表达式解析、求值和函数定义。 ## 已实现功能 ### 基本运算 - `+`, `-`, `*`, `/` - 四则运算 - `^` - 幂运算(右结合) - `!` - 阶乘 - `%` - 百分号(如 `50%` → `0.5`) - `()` - 括号分组 ### 运算符优先级 1. `^` (最高,右结合) 2. `*`, `/`, `%` 3. `+`, `-` (最低) ### 内置常数 - `pi` - 3.141592653589793 - `e` - 2.718281828459045 ### 数学函数 - **基础**: `sqrt`, `abs`, `floor`, `ceil`, `round` - **三角**: `sin`, `cos`, `tan`, `asin`, `acos`, `atan` - **对数**: `log`, `log10`, `log2`, `exp` - **聚合**: `min`, `max`, `gcd`, `lcm` ### 向量运算 - 向量字面量: `(1, 2, 3)` - 向量 + 标量: 逐元素运算 - 向量 * 标量: 逐元素运算 - 向量 * 向量: 点积 ### 函数定义 ``` f(x) = x * 2 f(5) => 10 add(x, y) = x + y add(3, 5) => 8 ``` ## 项目结构 ``` goldfish-hack2/ ├── liii/ │ ├── calc-token.scm # 词法分析器 │ ├── calc-parser.scm # 语法分析器 │ └── calc-eval.scm # 求值器 ├── tests/ │ └── resources/ # 150个测试用例 │ ├── 001.in # 输入 │ ├── 001.out # 期望输出 │ └── ... ├── repl.scm # 主入口和 REPL ├── test-calc.scm # 简单测试脚本 └── test-runner.sh # 测试验证脚本 ``` ## 使用方法 ### 交互式 REPL ```bash gf repl.scm > 1 + 2 3 > sqrt(16) 4 > ,q ``` ### 运行所有测试 ```bash gf repl.scm > ,t Running all tests... PASS: tests/resources/001.in PASS: tests/resources/002.in ... ==================== Total: 150, Passed: 150, Failed: 0 ``` ### 测试特定表达式 ```scheme (import (liii calc-token) (liii calc-parser) (liii calc-eval)) (define env (default-env)) (define tokens (tokenize "2 + 3 * 4")) (define ast (parse tokens)) (define result (evaluate ast env)) ; result => 14 ``` ## 实现细节 ### 1. 词法分析器 (calc-token.scm) - 将输入字符串分割为 Token 列表 - 支持数字(整数、小数、分数) - 支持标识符和运算符 ### 2. 语法分析器 (calc-parser.scm) - 递归下降解析器 - 处理运算符优先级 - 生成 AST(抽象语法树) ### 3. 求值器 (calc-eval.scm) - 遍历 AST 并计算结果 - 使用 Goldfish Scheme 内置数学函数 - 管理环境和函数定义 ## 测试用例覆盖 150个测试用例覆盖: - ✅ 基本运算 (1-50) - ✅ 数学函数 (51-100) - ✅ 常数和用户函数 (71-85, 120) - ✅ 向量运算 (101-120) - ✅ 三角函数 (121-150) ## 技术要点 ### 底层运算 所有数学运算直接使用 Goldfish Scheme 内置函数: ```scheme (calc-sin x) => (sin x) (calc-sqrt x) => (sqrt x) (calc-log10 x) => (/ (log x) (log 10)) ``` ### 除零处理 - `(/ x 0)` 当 x>0 → `+inf.0` - `(/ x 0)` 当 x<0 → `-inf.0` - `(/ 0 0)` → `+nan.0` ### 百分号处理 ```scheme 50% => 1/2 ; 50/100 20% * 4 => 4/5 ; 0.2 * 4 = 0.8 ``` ### 向量点积 ```scheme (1, 2, 3) * (4, 5, 6) => 32 ; 1*4 + 2*5 + 3*6 ``` ## 依赖 - Goldfish Scheme (v17.11.37+) - 标准库: `(scheme base)`, `(scheme inexact)`, `(scheme cxr)` - 扩展库: `(liii error)` ## 作者 三鲤网络 (Liii Network)