Pico 文档

语法参考

关键字中英对照

所有关键字中英文等价,可在同一文件混用:

英文中文用途
fn / function函数 / 方法定义函数
let / var定义 / 声明变量
struct结构体定义结构体
if如果条件
else否则条件分支
for对于 / 遍历循环
while条件循环
return返回返回值
yield产出生成器产出值
import导入导入模块
true / false / 布尔值
nil / null空值
match匹配模式匹配
spawn启动创建线程
try / catch尝试 / 捕获错误处理
in迭代/包含
and / or / not / / 逻辑运算
begin / end开始 / 结束块标记
async异步异步函数
await等待等待异步结果
break跳出循环
continue跳过本次循环

标点兼容

词法分析阶段自动替换,中英标点完全等价:

中文ASCII
,
:
( )
[ ]
" " "
;
函数 加法(甲,乙):   # 完全合法
    返回 甲 + 乙

变量声明

四种写法等价:

let x = 10
var x = 10
定义 x = 10
令 x = 10

可选类型标注(运行时不强制,仅作说明):

let name: str = "pico"
令 count: int = 0

数据类型

类型示例
整数42-70
浮点3.14-0.5
字符串"hello""你好"
布尔true / false /
空值nil / null /
列表[1, 2, 3]
字典{key: "value", n: 42}

字符串插值(f-string)

令 名字 = "世界"
令 n = 42
打印(f"你好,{名字}!数字是 {n}")

大括号内可以是任意表达式:

打印(f"结果:{1 + 2 * 3}")
打印(f"长度:{len(列表)}")

代码块(三种风格等价)

# 风格1:缩进块(推荐)
fn 加法(a, b):
    return a + b

# 风格2:大括号
fn 加法(a, b) {
    return a + b
}

# 风格3:begin/end
fn 加法(a, b) 开始
    return a + b
结束

运算符

运算符说明
+ - * / %算术
== != < <= > >=比较
and / 逻辑与(短路)
or / 逻辑或(短路)
not / 逻辑非
+字符串拼接
..范围(生成列表)
=赋值
+= -=复合赋值
令 r = 1..5      # [1, 2, 3, 4]
令 s = "hello" + " " + "world"
令 ok = x > 0 and x < 100

条件

if x > 0:
    打印("正数")
else if x < 0:
    打印("负数")
else:
    打印("零")

循环

# 范围循环
for i in 1..10:
    打印(i)

# 列表迭代
for 项 in ["a", "b", "c"]:
    打印(项)

# range() 函数
for i in range(5):       # 0 1 2 3 4
    打印(i)

for i in range(2, 7):    # 2 3 4 5 6
    打印(i)

# 条件循环
令 n = 0
当 n < 5:
    n += 1

# break / continue
for i in range(10):
    if i == 3: continue
    if i == 7: break
    打印(i)

函数

# 基本定义
fn 问候(名字):
    return f"你好,{名字}"

# 多参数
fn 加法(a, b):
    return a + b

# 无返回值(返回 nil)
fn 打印两次(x):
    打印(x)
    打印(x)

# 匿名函数
令 平方 = fn(x): return x * x
令 结果 = 平方(5)   # 25

# 闭包
fn 计数器():
    令 n = 0
    return fn():
        n += 1
        return n

令 c = 计数器()
打印(c())   # 1
打印(c())   # 2

结构体

结构体 用户:
    名字: str
    年龄: int

    fn 问候(self):
        return f"我是{self.名字},{self.年龄}岁"

    fn 生日(self):
        self.年龄 += 1

令 u = 用户{名字: "小明", 年龄: 18}
打印(u.问候())
u.生日()
打印(u.年龄)   # 19

self自身 等价。

继承

结构体 动物:
    名字: str
    fn 说话(self): return f"{self.名字}..."

结构体 狗(动物):
    fn 说话(self):
        令 base = super.说话(self)
        return f"{self.名字}:汪汪!"

结构体 猫(动物):
    fn 说话(self): return f"{self.名字}:喵~"

令 d = 狗{名字: "旺财"}
令 c = 猫{名字: "咪咪"}
打印(d.说话())   # 旺财:汪汪!
打印(c.说话())   # 咪咪:喵~
  • struct 子类(父类): / 结构体 子类(父类): 声明继承
  • 方法查找沿继承链向上
  • super / 父类 调用父类方法

列表操作

令 l = [3, 1, 4, 1, 5]

l[0]          # 3(索引)
l[1..3]       # [1, 4](切片)
len(l)        # 5

字典操作

令 m = {name: "pico", version: 1}

m["name"]     # "pico"
m["version"]  # 1
m["new"] = 42 # 新增键

模式匹配

匹配 x:
    0 => 打印("零")
    1 | 2 => 打印("一或二")
    _ => 打印("其他")

_ 为默认分支,| 匹配多个值。

生成器

fn 斐波那契():
    令 a, b = 0, 1
    当 真:
        产出 a
        a, b = b, a + b

for n in 斐波那契():
    if n > 100: break
    打印(n)

错误处理

尝试:
    令 结果 = 危险操作()
    打印(结果)
捕获 err:
    打印(f"出错:{err}")

多线程

# 创建线程
令 任务 = 启动 fn():
    return 耗时计算()

令 结果 = 任务.等待()   # 阻塞等待

# 互斥锁
令 锁 = Mutex()   # 或 互斥锁()
锁.lock()
# 临界区
锁.unlock()

# 通道(有缓冲)
令 ch = Channel(10)   # 或 通道(10)
ch.send(42)
令 v = ch.recv()

异步函数

async fn 获取(地址):
    令 响应 = await 网络.获取(地址)
    return 响应

令 结果 = 获取("https://example.com")

导入模块

import math
导入 math

# 使用
math.sqrt(16)

注释

# 这是单行注释
令 x = 1   # 行尾注释