似た問題にとりくんでみた

昔、迷路を解く問題をやったんですが、似た問題にとりくんでみました。

どう書く.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.

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.