看了 @chenge 发的帖子 , 于是就用 Ruby 实现了一份。程序结构与原来的 Lispy 保持一致,主要是为了按作者的思路来实现,写的仓促,请见谅!Orz。 说明在 这里. 代码在 GitHub .
scm.rb> (list 1 2 3)
(1 2 3)
scm.rb> (append (list 1 2 3) 4)
(1 2 3 4)
scm.rb> (begin (define r 3) (* 3.141592653 (* r r)))
28.274333877
scm.rb> (define fact (lambda (n) (if (<= n 1) 1 (* n (fact (- n 1))))))
scm.rb> (define area (lambda (r) (* 3.141592653 (* r r))))
scm.rb> (area 3)
28.274333877
scm.rb> (fact 10)
3628800
scm.rb> (fact 100)
9332621544394415268169923885626670049071596826438162146859296389521759999322991560894146397615651828625369792082722375825118521091686400000000000000000000000
scm.rb> (length (list 1 2 3 4 5))
5
scm.rb>