元语
一个带有类型系统的 LISP 语言。
特性
- 采用 Hindley-Milner 类型系统(所有类型可推导)。
- 支持代数类型与模式匹配(没有子类型)。
- 支持尾递归优化(不需要特殊的循环语法)。
- 模块系统与文件系统解耦。
- 内置测试框架。
文档
例子
scheme
(模块 数学)
(声明 平方 (-> 整数型 整数型))
(定义 (平方 数)
(整数乘 数 数))
(定义测试 平方测试
(断言相等 81 (平方 (平方 3))))scheme
(模块 数学)
(声明 最大公约数 (-> 整数型 整数型 整数型))
(定义 (最大公约数 甲 乙)
(若 (整数为零 乙)
甲
(最大公约数 乙 (整数模 甲 乙))))
(定义测试 最大公约数测试
(断言相等 1 (最大公约数 13 7))
(断言相等 4 (最大公约数 12 8)))scheme
(模块 数学)
(声明 阶乘 (-> 整数型 整数型))
(定义 (阶乘 数)
(若 (整数小于等于 数 1)
1
(整数乘 (阶乘 (整数减 数 1)) 数)))
(定义测试 阶乘测试
(断言相等 1 (阶乘 0))
(断言相等 1 (阶乘 1))
(断言相等 2 (阶乘 2))
(断言相等 6 (阶乘 3))
(断言相等 24 (阶乘 4))
(断言相等 120 (阶乘 5)))scheme
(模块 例子)
(定义枚举 项型
(变量项 (名 符号型))
(作用项 (目标 项型) (参数 项型))
(函项 (形参 符号型) (体 项型))
(令项 (名 符号型) (所令 项型) (体 项型)))
(定义黑盒类型 环境型 (散列型 符号型 值型)
(空环境 (-> 环境型))
(扩展环境 (-> 符号型 值型 环境型 环境型))
(环境查找 (-> 符号型 环境型 (或有型 值型))))
(定义 空环境 作散列)
(定义 扩展环境 散列复制存)
(定义 环境查找 散列取或有)
(定义枚举 值型
(闭包值 (环境 环境型) (形参 符号型) (体 项型)))
(定义 (求值 项 环境)
(匹配 项
((变量项 名)
(匹配 (环境查找 名 环境)
((有 值) 值)
((无) (报错 "未定义的名字"))))
((作用项 目标 参数)
(作用 (求值 目标 环境) (求值 参数 环境)))
((函项 形参 体)
(闭包值 环境 形参 体))
((令项 名 所令 体)
(令 ((环境 (扩展环境 名 (求值 所令 环境) 环境)))
(求值 体 环境)))))
(定义 (作用 目标 参数)
(匹配 目标
((闭包值 环境 形参 体)
(求值 体 (扩展环境 形参 参数 环境)))))