2011-10-01から1ヶ月間の記事一覧

LOOP マクロでできないこと

残念ながら Common Lisp の LOOP マクロでもできないことがあるようだ。「あらゆる数独パズルを解く」の python のコードで、search という関数で見つけた。 def search(values): "深さ優先探索と制約伝播を使い、すべての可能なvaluesを試す。" if values i…

スペル修正プログラム

Python で書かれたプログラムを Common Lisp に置き換えるのに数独パズルで慣れてきた。ついでにスペル修正プログラムもやってしまおう。 Python の dict, set はとても強力だ。CL でも union とか pushnew とかリストを set のように扱うことはできるけど、…

続続数独パズル

少し改良。エンバグしていませんように。 ;; sudoku solver ;; see peter norvig's article(sudoku.htm) (in-package :common-lisp-user) (ql:quickload :com.gigamonkeys.test-framework) (defpackage :sudoku (:use :cl :com.gigamonkeys.test)) (in-packa…

LOOP マクロのコツ

LOOP マクロを使うとき、わたしはつい、以下のように書いてしまう。 (defun parse-grid (grid) "テキスト形式 grid を可能な値のハッシュテーブルに変換する。 square => digits ただし矛盾が見つかった場合は nil を返す。" (let ((values (make-hash-table…