Ruby ScmRb : Scheme Interpreter In Ruby

skandhas · 2013年04月11日 · 最后由 chenge 回复于 2016年07月04日 · 4443 次阅读

看了 @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>

太好了,我去看看,学习下。

学习了..

我还没开始玩了就 Crash 了 已经献给楼主第一个 issue

#3 楼 @iBachue 呵呵 这只是一个 Lispy 的复制版本,Lispy 不支持的,ScmRb 也不支持啦。

#5 楼 @skandhas 额 那就没意思了 既然是做一个 Scheme 解释器 至少把 lambda 那点东西整成熟了吧。。否则 Lisp 就没得玩了。。

#3 楼 @iBachue 还有就是 如: + - * / 等,只支持两个参数。像 (+ 1 2 3) 这样的也不支持。与 Lispy 高度一致。呵呵

#6 楼 @iBachue 呵呵 有时间就会往下搞。 现在的 ScmRb 主要就是为了 @chenge 的那篇帖子而诞生的,目的就是复制 Lispy。而 Lispy 本身就不是一个完整的 Scheme 解释器 ;)

我大致结构能看懂,有些细节就感觉不好懂。能否就难点解说一二呢?

#10 楼 @chenge 你的帖子里引用的原作者的文章就很明了啊。具体是 parse 过程 还是 eval 过程?

#11 楼 @skandhas 我看了,可能是有些复杂不能完全明白。也许你能有新的见解呢?不勉强。

#12 楼 @chenge 喔,有时间的话,我再补充一下相关代码的说明吧。

楼主是 从来不露相真人, 鉴定完毕!

chenge Ruby 学习汇集,请推荐内容 提及了此话题。 07月04日 11:35
skandhas ScmRb 2 : Scheme Interpreter In Ruby 提及了此话题。 04月03日 10:56
需要 登录 后方可回复, 如果你还没有账号请 注册新账号