写了第一个Scheme程序。
本来想写个汉诺塔非递归解的实现,但实在没弄明白怎么把规则/状态/操作抽象成纯函数。。慢慢想吧。。
还是递归解最爽,而且用Scheme实现看上去很优雅。。倒不是说我写的有多好,是因为Scheme里面用递归怎么看都漂亮。。
(begin
; MoveUpper means move plate 1 to n from peg a to c with help of b
(define (MoveUpper n a b c)
(begin
(if (equal? n 1)
(MoveBottom n a c)
(begin
(MoveUpper (- n 1) a c b)
(MoveBottom n a c)
(MoveUpper (- n 1) b a c)
)
)
))
; MoveBottom means move the plate n from a to c directly
(define (MoveBottom n a c)
(begin
(display “Move “)
(display n)
(display ” from “)
(display a)
(display ” to “)
(display c)
(newline)
)
)
; Move 5 plates from peg 1 to peg 3 with help of peg 2
(MoveUpper 5 1 2 3)
)
另外,下载了Paul Graham的“On Lisp”,准备读一读。
陈老师也看SICP么。。
嗯,已经在收藏夹里了。。不过没时间呢。。
曾几何时我在学Klingon然后从朋友的链接里看到了你,后来我开始学SICP于是我又从google personal results里看到了你……