2009/05/13

[Scheme][Hanoi]ハノイの塔:Tower of Hanoi

WS0773

ハノイの塔は随分前にC#でやったことあったけどもう忘れた。これ言うほど簡単じゃなくね?というのが本心です。
Web上には「ハノイの塔」の手続き中で出力処理(Printとか)を行ってるものが多いけど、それってどうなの。やはりこういうのよりよはこっちが好み。

Tower of Hanoi - ハノイの塔
(define (hanoi n from to using)
    (cond
         ((zero? n) '())
         (else (append
                    (hanoi (- n 1) from using to)
                     (list (cons from to))
                     (hanoi (- n 1) using to from)))))

(hanoi 3 '1 '2 '3)
;; => ((3 . 1) (3 . 2) (1 . 2) (3 . 1) (2 . 3) (2 . 1) (3 . 1))

(hanoi 3 'a 'b 'c)
;; => ((a . b) (a . c) (b . c) (a . b) (c . a) (c . b) (a . b))

(hanoi 5 'c 'a 'b)
;; => ((c . a) (c . b) (a . b) (c . a) (b . c) (b . a) (c . a) (c . b) (a . b) (a . c) (b . c) (a . b) (c . a) (c . b) (a . b) (c . a) (b . c) (b . a) (c . a) (b . c) (a . b) (a . c) (b . c) (b . a) (c . a) (c . b) (a . b) (c . a) (b . c) (b . a) (c . a))


The Little Schemer, 4th Edition 計算論 計算可能性とラムダ計算 (コンピュータサイエンス大学講座)計算機プログラムの構造と解釈プログラミングGauche

0 件のコメント:

コメントを投稿