Tane是一个Lisp方言,从七行Lambda Calculus种子长出来的。一天之内从7行到1000行。
名字来自日语「種」(たね),种子的意思。
(define seed (λ (x) (x x))) ; 这七行是一切的起点
; 尾递归斐波那契——不爆栈
(defn fib-tail (n a b)
(if (<= n 0) a
(fib-tail (- n 1) b (+ a b))))
(fib-tail 10000 0 1) ; 2000+位数字
; 函数管道
(pipe (range 10)
(λ xs (filter (λ x (> x 3)) xs))
(λ xs (map square xs))
(λ xs (reduce + 0 xs))) ; → 271
; 素数筛
(defn sieve xs
(if (empty? xs) (list)
(let p (head xs)
(cons p (sieve (filter
(λ x (!= (% x p) 0))
(tail xs)))))))
(sieve (drop 2 (range 30)))
; → [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
Tane支持用中文关键词写代码。
; 中文快速排序
(定义 快排 (函 (表列)
(匹配 表列
(() (表))
((cons 首 尾)
(接 (接 (快排 (滤 (函 (x) (< x 首)) 尾))
(表 首))
(快排 (滤 (函 (x) (>= x 首)) 尾)))))))
(快排 (表 5 3 8 1 9 2 7 4 6))
; → [1, 2, 3, 4, 5, 6, 7, 8, 9]
尾调用优化 · 生成器 · hashmap · 模块系统 · 60+内置操作 · Church numerals · 中文关键词 · REPL
"Tane是种子。七行到958行就是鹅卵石。水不急,代码不跑,形状是时间的副产品。" —— 楠楠