灵感来自邱璇洛
简介
我们将会使用Nim实现一个简单的波兰表达式的终端计算器 甚至只支持浮点数。
开始
在Nim中,获取控制台输入内容是十分容易的一件事情,控制台输入的内容在Nim中可以使用os
标准库的paramStr(index)
过程获取。
nim c -r compute.nim + 1.0 2.0
在上面的控制台里我们一共输入了三个内容+
,1.0
和2.0
,在Nim里,控制台传入的数据都是字符串。
我们可以在compute.nim
中获取他们
import os
echo paramStr(1) # +
echo paramStr(2) # 1.0
echo paramStr(3) # 2.0
剩下的就简单了,只需要写一个简单的波兰表达式的计算函数
proc calculate(symbol: string, a: float, b: float): float=
if symbol == "+":
return a + b
elif symbol == "-":
return a - b
elif symbol == "*":
return a * b
elif symbol == "/":
return a / b
else:
# 错误处理
raise newException(OSError, "错误:未知符号类型")
解析控制台的命令
let ShellSymbol = paramStr(1)
# 抓换类型
var ShellA: float
discard parseFloat(paramStr(2), ShellA)
var ShellB: float
discard parseFloat(paramStr(3), ShellB)
最后输出结果
stdout.write calculate(ShellSymbol, ShellA, ShellB)
完整代码
import os
import parseutils
proc calculate(symbol: string, a: float, b: float): float=
if symbol == "+":
return a + b
elif symbol == "-":
return a - b
elif symbol == "*":
return a * b
elif symbol == "/":
return a / b
else:
raise newException(OSError, "错误:未知符号类型")
let ShellSymbol = paramStr(1)
var ShellA: float
discard parseFloat(paramStr(2), ShellA)
var ShellB: float
discard parseFloat(paramStr(3), ShellB)
stdout.write calculate(ShellSymbol, ShellA, ShellB)
代码高亮太难了,呜呜呜,找了一堆不同语言渲染差不多的效果