写了第一个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)
)

用的是MIT/GNU Scheme

另外,下载了Paul Graham的“On Lisp”,准备读一读。

Trackback

3 comments untill now

  1. 陈老师也看SICP么。。

  2. 嗯,已经在收藏夹里了。。不过没时间呢。。

  3. 曾几何时我在学Klingon然后从朋友的链接里看到了你,后来我开始学SICP于是我又从google personal results里看到了你……

Add your comment now