简易计算器
我们这次实现的命令行计算器,支持加减乘除、括号、浮点数、负数,以及查看历史和退出功能。
主要的思路:read - parse - print - loop。
read 阶段是指从读取用户在提示符(cal> )之后输入的字符串。
parse 阶段包括:将用户输入的字符串分割成单个对象比如:符号 +,或者数字 1.2 。其次将中缀表达式转化后缀表达式,接下来计算后缀表达式的数值。
print 阶段指的是将 parse 阶段的数值打印在终端上。
loop 阶段是指重复上述操作,除非用户输入 exit 符号或者 Ctrl + C 终止程序运行。
实现效果图:
栈
为了实现后面的中缀、后缀表达式,我们需要借助栈这种数据结构。
栈是一种先进后出的数据结构,函数调用时就会使用栈来保存当前程序的地址及其他信息,前面的深度优先搜索就是基于栈实现的。
之前写了一篇文章介绍了栈的用法,下面简单说明栈的使用:
push 函数在栈的顶部添加元素,pop 函数删除栈顶的元素,top 函数查看栈顶函数。
# nim编程
type Stack*[T] = ref object
container*: seq[T]
proc len*[T](s: Stack[T]): int =
s.container.len
proc push*[T](s: Stack[T], elem: T) =