#计算器 #绘图 #极简 #可配置 #词法分析 #计算 #计算

应用 mini-calc

一个功能齐全的极简可配置Rust计算器

39个稳定版本

3.2.0 2024年6月5日
3.1.0 2024年5月26日
2.13.2 2024年5月14日
2.13.1 2024年4月23日
1.0.0 2023年11月12日

#22 in 可视化

Download history 49/week @ 2024-04-26 3/week @ 2024-05-03 86/week @ 2024-05-10 334/week @ 2024-05-17 176/week @ 2024-05-24 148/week @ 2024-05-31 32/week @ 2024-06-07 9/week @ 2024-06-14 4/week @ 2024-06-21 1/week @ 2024-06-28 34/week @ 2024-07-05 176/week @ 2024-07-26 23/week @ 2024-08-02

199 每月下载量

GPL-3.0-or-later

320KB
9K SLoC

Calc

Calc:一个功能齐全的极简可配置Rust计算器

Rust Test Release

安装

源码

您可以从源码安装最新版本

git clone https://github.com/coco33920/calc
cd calc
cargo build --release
./target/release/mini-calc

Cargo

cargo install mini-calc

使用Nix

另外,您可以使用nix来构建或运行此项目。

直接运行

nix run github:coco33920/calc

您可能需要启用nix实验性功能。在这种情况下,执行以下命令:mkdir -p ~/.config/nix && echo "experimental-features = nix-command flakes" | tee ~/.config/nix/nix.conf

从包装版本

网站上提供.deb.rpm

网站

该网站(由oranda提供支持)提供更多信息网站

手册

如果您需要PDF版本,这里有手册

贡献者

姓名 角色 网站
Charlotte THOMAS 主要开发者/维护者 主页
Léana 江 帮助,清理 网站/博客
Sigmaficient Nixify 网站

待办事项列表

待办事项列表已完成,因此已折叠

待办事项列表
  • 基本操作的词法分析
    • 操作符的词法分析
    • 括号的词法分析
    • 整数的词法分析
    • 浮点数的词法分析
    • 标识符的词法分析
  • 基本操作的解析
    • 整数的解析,浮点数和标识符
    • 加法操作
    • 减法操作
    • 乘法操作
    • 除法操作
  • 高级操作的解析
    • 括号的解析
    • 数学优先级
      • 左优先级
      • 右优先级
    • 括号支持
    • 赋值
    • 结合性支持
      • 左结合性
      • 右结合性
  • 应用REPL
    • 添加REPL
      • 基本REPL
      • 彩色消息
      • 彩色提示
    • 添加颜色
  • 解释器
    • 基本操作解释器
    • 高级操作解释器
    • 标识符(变量)解释器
  • 内置
    • pi
    • e
  • 配置
    • 配置颜色
    • 配置提示
  • 添加更多操作
    • 指数
  • 添加对函数的支持
    • exp
    • ln
    • 以a为底的对数
    • cos/sin/tan
    • cosh/sinh/tanh
    • atan/acos/asin
  • 添加逻辑
    • 添加基本真/假
    • 添加二元运算符
      • 或 (&&)
      • 与 (||)
      • >=
      • >
      • <=
      • <
      • ==
    • 添加一元运算符
      • 非 (!)
  • 向量计算
    • 将向量添加到数据类型
    • Lex向量
    • 解析向量
    • 添加向量操作
      • 点积
      • 向量范数
      • 向量加法
  • 矩阵计算
    • 将矩阵添加到数据类型
    • Lex矩阵
    • 解析矩阵
    • 添加矩阵操作
      • 矩阵加法
      • 矩阵乘法
      • 计算矩阵行列式
      • 计算矩阵逆
  • 与配置交互
    • 打印当前配置
    • 将配置重置为默认值
    • [X] 设置配置
      • 设置主要颜色
      • 设置提示颜色
      • [X] 设置提示
      • 设置问候消息
      • [X] 设置问候颜色
    • [X] 重新加载配置

进化

绘图

绘图函数(既包括stdlib,也包括运行时)将是有用且受欢迎的。绘图由gnuplot提供支持,将在类Unix(MacOS,Linux)上工作,但我对Windows没有任何想法。

  • 绘制stdlib函数

  • [X] 绘制运行时函数

  • 将绘图保存为png/svg/pdf

  • 添加终端绘图

    • 计算绘图的高度和宽度
    • 计算单独的点
    • 生成每一行
    • 打印每一行
  • 在termplot中自动设置x轴的级别

  • 在termplot中自动设置y轴的级别

绘图示例

您可以绘制calc的标准库中定义的函数或用户定义的函数,要显示帮助,请输入 plot()

然后您可以绘制,例如

使用默认值绘制cos(从0到3pi,步长为0.01pi)

使用自定义值绘制sin(从-pi到pi,步长为0.01弧度,带有线条、标题、x标签、y标签)

定义f(x) = x²并使用自定义值绘制它(从-10到10,步长为0.1,带有线条点和)

终端绘图示例

您可以在终端中绘制,例如

它也支持标签

现在它在y轴上自动缩放!

精确数学计算器

由于本项目提供了一个带有解析器的用户界面,我们可以在后端插入一个精确数学引擎,将calc转换成一个真正的精确数学计算器。精确数学引擎的待办事项列表

  • 有理数计算
    • 实现有理数运算
    • 有理数约简
  • 文字计算
    • 计算未初始化运算符的文字表达式
    • 文字约简
  • 无理数计算
    • 实现无理数运算
    • 无理数约简

有理数计算示例

截至2.11.0,已实现有理数精确数学支持

截至2.11.1,它可以在矩阵中工作!

截至2.11.4,浮点数将自动有理化(精度为10位小数)

CAS

如果我们走到这一步,是的,我会从描述中删除“极简”这个词

  • 很难。

示例

只有Lexing的REPL(详细模式:默认开启)

具有Lexing和基本操作解析的REPL(详细模式:默认开启)

REPL和功能解释器(详细模式:默认关闭)

配置

您可以从文件中配置通用颜色、问候消息、问候颜色、提示和提示颜色,例如在(Linux)中

~/.config/mini-calc/mini-calc.toml

或者位于您的操作系统配置文件夹中。

您可以使用命令行与配置交互,更多详细信息请参阅网页

配置看起来是什么样子

默认配置看起来是这样的

img.png

颜色

可用的颜色有

  • 紫色
  • 青色
  • 蓝色
  • 黑色
  • 红色
  • 黄色
  • 绿色
  • 白色
  • 十六进制颜色(例如:"#f7a8d8")

默认颜色(如果配置加载失败)是青色。

修改后的配置示例

配置

img.png

看起来是这样的

img.png

功能

以下功能可用

  • sin
  • cos
  • tan
  • sinh
  • cosh
  • tanh
  • asin
  • acos
  • atan
  • exp
  • ln(别名:log)
  • sqrt
  • factorial(别名:fact)
  • abs
  • ceil
  • floor
  • round

三角学

对于三角学,输入值默认以弧度为单位,如果不是,则必须在第二个参数中输入"false"或"true",下面有示例

img.png

Exp/ln

如果您使用exp函数,可以传递第二个参数指定您正在使用的基数,如果没有传递第二个参数,则默认为自然对数底数

img.png

根号

您可以使用sqrt函数来取n次方根,默认情况下取平方根。

img.png

四舍五入

您可以使用round函数将结果四舍五入到n位小数,默认情况下四舍五入到整数(floor)

img.png

向量化

现在函数已经向量化了!只需传递一个向量作为参数即可!

逻辑

您现在可以使用逻辑!我实现了以下函数

  • or(别名:||)
  • and(别名:&&)
  • geq(别名:>=)
  • gt(别名:>)
  • leq(别名:<=)
  • lt(别名:<)
  • eq(别名:==)

示例

img.png

用户定义的函数!

您可以定义自己的函数!

img.png

向量计算!

您可以使用向量!

  • 将向量相加
  • 添加了norm函数来计算范数
  • 两个向量的点积(*运算符)

添加的函数

  • norm

矩阵!

从2.7.0版本开始,实现了矩阵代数(使用lup约简)

  • 您可以添加矩阵
  • 相乘的兼容矩阵

添加的函数

  • 转置
  • 求逆
  • det

从2.11.3版本开始,矩阵将被格式化打印!

非交互式使用

从2.12.0版本开始,增加了非交互式使用

依赖关系

~6.5MB
~151K SLoC