CNplus 自己是个小语言,但它站在 Python 这个巨人的肩膀上。用「导入」,几十万个 Python 库都能为你所用——读写文件、上网、算数学、画图……
| 命令 | 后端 | 特点 |
|---|---|---|
cnp 运行 x.cnp |
树遍历 | 直接解释执行,启动快,报错精准 |
cnp 运行 --python x.cnp |
Python 转译 | 先翻成 Python 再跑,能借用 pip 生态 |
cnp 编译 x.cnp |
Python 转译 | 生成独立的 .py,拷到别处也能跑 |
两个后端行为完全一致——同一段代码,输出一模一样。这是靠 446 个测试里的「对拍」保证的:每个例子都在两个后端跑一遍比对,CNplus 的规则(严格真值、除法恒为小数、跨类型报错)在两边都成立。
导入 "math" 作为 数学
打印(文本(数学.sqrt(16))) # 4.0
打印(文本(数学.pi)) # 3.141592653589793
三行读懂:
导入 后面跟库名,写在引号里(库名是英文,因为那是 Python 的库)作为 数学 给它起个中文名,之后就用这个名字. 访问库里的东西:数学.sqrt不起别名也行,默认用库名本身:
导入 "random"
打印(文本(random.randint(1, 6))) # 掷骰子
导入 "pathlib" 作为 路径库
设 文件 = 路径库.Path("/tmp/我的笔记.txt")
文件.write_text("你好,文件!", "utf-8")
设 内容 = 文件.read_text("utf-8")
打印(内容)
⚠️ 借用库必须用转译后端:
cnp 运行 --python x.cnp,或先cnp 编译再运行生成的.py。树遍历后端暂不支持导入。
cnp 编译 我的程序.cnp
# 生成 我的程序.py,可以拷到任何装了 python3 的电脑上运行
python3 我的程序.py
生成的 .py 是自包含的——不依赖 CNplus,CNplus 的运行时被内联进了文件里。你可以把它发给没装 CNplus 的朋友。
库抛出的错误会被标成 CN9001,并告诉你这是库的错,不是 CNplus 的错:
错误[CN9001]: 调用 Python 库时出错:ValueError: math domain error
--> 我的程序.cnp:3:1
| 设 x = 数学.sqrt(-1)
= 也就是说: 这个错误来自你导入的 Python 库,不是 CNplus 本身
= 这样改: 检查传给库的参数类型和数量,或参考该库的文档
注意它准确指向出错的那一行(第 3 行),不是导入那一行。
下一章:十一、看懂错误