#lisp #wasm-interpreter #interpreter #wasm #language

bin+lib callisp

一个可以与 WASM 一起使用的 Lisp 解释器

3 个不稳定版本

0.2.1 2023 年 1 月 24 日
0.2.0 2023 年 1 月 22 日
0.1.0 2023 年 1 月 21 日

674编程语言 中排名

每月下载量 28

GPL-2.0 许可证 GPL-2.0

33KB
767 行代码 (行数)

Callum's Lisp

Build Crates.io Docs Lines of code Files License

一个为在浏览器中使用 WASM 运行的 Lisp 解释器。

用法

您可以使用 +, -, *, / 执行简单的数值运算

(+ 1 2) => 3
(/ 5 2) => 2.5
(- 2) => -2
(/ 5) => 0.2

您可以使用 def 定义常量

(def x 3) => 3
x => 3

您可以使用 lambda 创建函数

(lambda (x) (+ x 1)) => <function>
(def add1 (lambda (x) (+ x 1))) => <unspecified>
(add1 3) => 4

所有内置函数和特殊形式的列表

特殊形式

  • (def name value):在当前环境中将名称绑定到值
  • (lambda (bindings) expr)(λ (bindings) expr):创建一个函数
  • (if cond do else):如果 cond 为真,则评估 do expr,否则评估 else expr

内置函数

  • +,-,*,/:简单的算术运算符
  • exit:退出,返回代码 0 或由参数提供的代码
  • eval:评估作为参数传递的表达式
  • use:评估当前环境中文件中包含的所有表达式
  • putstr:将字符串打印到 stdout
  • readline:从 stdin 读取一行
  • equal?:检查任意数量的值是否相等
  • >, >=, <, <=:数字比较运算符
  • list:根据给定的参数创建一个列表
  • list?:如果参数是列表,则返回 true,否则返回 false
  • empty?:如果参数是长度为 0 的列表,则返回 true,否则返回 false
  • count:如果参数是列表,则返回参数的长度

目标

优先级排序的目标

  • 尾递归优化
  • 宏定义
  • 适当的错误处理
  • 字符串
  • 多精度数字
  • 向量
  • 结构体/枚举/联合类型
  • 输入输出(打印、读取等)

依赖项

~1.6–2.5MB
~48K SLoC