似た問題にとりくんでみた
2007/07/26
昔、迷路を解く問題をやったんですが、似た問題にとりくんでみました。
どう書く.org http://ja.doukaku.org/comment/1475/
前のエントリ id:smeghead:20070614:maze2
相変わらず論理的思考は弱いんですが、覚えた部分や変わってきた部分はあります。
- loopマクロへの恐怖心が柔らいだ。
- hyperspecを読むようになった。
- 妙な抽象化に挑戦するようになった。
抽象化のチャレンジについては、現時点は結果的に逆効果になっても良いので、lisp的な抽象化技法を覚えたいと思っています。
テストコードを書くようになって、作成中の関数以外のことを気にしなくなったのは、大きいかもしれません。
lisp-unitでのテストコード
(load "maze.cl") (load "/usr/lib/clisp/lisp-unit/lisp-unit.lisp") (use-package :lisp-unit) (setq map1 (make-array '(5 7) :initial-contents '(".+....." ".+.+++." ".+.+.+." ".+++.+." ".....+."))) (setq map2 (make-array '(5 7) :initial-contents '(".+..+.." ".+.+++." ".+.+.+." ".+++.+." "......."))) (define-test start-points (assert-equal '((0 . 1)) (start-points map1)) (assert-equal '((0 . 1) (0 . 4)) (start-points map2))) (define-test movablep (assert-equal '(1 . 1) (movablep map1 '((0 . 1)) :x-fn #'1+)) (assert-equal nil (movablep map1 '((0 . 1)) :x-fn #'1-))) (define-test next-points (assert-equal '((1 . 1)) (next-points map1 '((0 . 1))))) (define-test throughp (assert-equal t (throughp map1)) (assert-equal nil (throughp map2))) (run-tests start-points movablep next-points throughp)
実行結果
$ clisp maze-test.cl START-POINTS: 2 assertions passed, 0 failed. MOVABLEP: 2 assertions passed, 0 failed. NEXT-POINTS: 1 assertions passed, 0 failed. THROUGHP: 2 assertions passed, 0 failed. TOTAL: 7 assertions passed, 0 failed, 0 execution errors.