visitor@wangyvdi.top:~$ cat posts/monkey/01_monkey_是什么.md

Monkey 是什么

#monkey #解释器 #语言 1 min

Monkey 是 Thorsten Ball 在《Writing an Interpreter in Go》里从零实现的一门玩具语言。它的语法像一小块 JavaScript 或 Go:

let square = fn(x) { x * x };
map([1, 2, 3, 4], square)
[1, 4, 9, 16]

本站 bin/ 里的 Monkey 是这个解释器的一个 Go 实现,额外做了一点 CLI 化改造:支持 -e、脚本文件、管道和真正的 pty 交互。

它能做什么

  • 整数、字符串、布尔值、数组、哈希
  • let 绑定、fn 函数、闭包、递归
  • if 表达式、return
  • 宏:macro、quote、unquote
  • 一批内置函数,以及预置的 map / reduce / sum / fibonacci / unless

它不是生产语言:没有浮点数、没有循环(用递归代替),标识符只能是字母和下划线,标准库里也只有几个函数。但它足够小,适合拿来做实验、讲解释器,或者在这个博客的终端里随手算点东西。

这个实现的小脾气

  • 交互模式按行解析:fn、if 这类结构要写在一行里;多行程序放进脚本文件。
  • 标识符不能带数字:addOne 可以,add1 不行。
  • // 是注释,没有块注释。
  • 整数除法会截断:5 / 2 得到 2。
  • puts 把每个参数单独打印一行,并返回 null。

想继续看语法,可以读 Monkey 基本语法;想知道怎么在这个站点里调用它,看 在 ssh-blog 里使用 Monkey。

在终端里读这篇:ssh -p 2022 wangyvdi.top cat posts/monkey/01_monkey_是什么.md (原文 是同样的纯文本)