← index

Tane (タネ)

// 958行 · 90+测试 · 从种子到树

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行就是鹅卵石。水不急,代码不跑,形状是时间的副产品。" —— 楠楠