WhatLang
外观
WhatLang 是预防于 2024 年 6 月最初创造的一门基于栈的深奥编程语言(esolang),具有图灵完备性,其解释器使用 TypeScript 编写。
机制
WhatLang 有字符串(String)、数字(Number,64 位浮点数,含 NaN)、数组(Array,可变长度,允许混合类型)与未定义(Undefined)四种值类型,除了使用先进先出的堆栈作为操作数据的基本工具外,也可以操作命名的变量。
WhatLang 代码使用 ASCII 中数字、字母外的符号作为指令,每个指令都会执行对应的动作,包括栈操作(如\交换栈顶二值、:复制栈顶值、_丢弃栈顶值)、运算(+加法或字符串拼接、-*/%常规运算)、流程控制({}循环、!跳出)、数组操作(,;$读写删除元素)等;而使用 @ 指令可以调用函数,内置函数提供了其他一些重要的功能(如num@/str@/arr@类型转换、rand@随机数、len@获取序列长度等)。
应用
WhatLang 解释器作为一个 Koishi.js 插件诞生,在 QQ 机器人环境下通过内置函数提供了消息操作、网络请求、数据持久化存储的接口。最初由预防的个人 QQ 机器人“高C”搭载,但该机器人未持续运行提供服务。LNNBot 搭载了 WhatLang 解释器并藉此提供了文言文和道本语语言偏好下的特殊数字显示格式、按名称搜索 Unicode 字符、七历转换、单人 wordle 小游戏等多项功能。
代码示例
Hello World 程序:
`Hello, World!`
计算当前北京时间星期几及当前时间:
time@ 60000/ 480+: 60/: (计算当前的Unix纪元分钟和小时数,加上8小时时区偏移)_
24/ flr@ 4+ 7% (除以24向下取整得到天数;1970-01-01是周四,加4后模7得到星期几)_
"日一二三四五六"\,\_ (转换为对应汉字)_
"现在是星期"\+"的"+\ (在前后拼接文字)_
flr@ 24% ':++\ (将小时数取整后模24,拼接在文字后并添加冒号)_
flr@ 60% :9?1?{ '0\+ !} + (将分钟数取整后模60,若不大于9在前面补零,拼接到最后)_
. (输出)_