GitHub - abuseofnotation/termlisp: 一种基于模式匹配和项重写的 Lisp 方言

主要观点:term-lisp 是一种用于术语处理的语言,受 Pie、Haskel、Agda 等启发,处于早期阶段,很多功能可能不完善。
关键信息

  • 基于术语重写,不支持变量,函数是描述如何用一个术语替换另一个术语的规则,如布尔值的定义。
  • 支持一等模式匹配,可让函数返回模式,如 if 表达式的定义。
  • 采用惰性求值,避免函数执行副作用,如 assertEqual 函数。
  • 基于原子和列表,pair 是可定义和使用的数据类型之一。
  • 函数定义通过参数和表达式用等号分隔,支持多种模式匹配特性,如解构参数、值匹配、多实现、传递函数等。
    重要细节
  • 在 term-lisp 中,未定义的术语不是错误,只是未定义的术语。
  • 功能性应用如 (car (cons foo bar)) 求值为 foo 。
  • 构造未定义函数应用的表达式会创建新的数据类型/构造器,如 Pair foo bar 。
  • 运行 term-lisp 需在项目根目录运行 node termlisp.js <file> ,会评估 prelude 模块和提供的文件并进入 REPL 模式。还可阅读 the prelude
阅读 29
0 条评论