何故ならば「find-logical-path」関数は与えられた n 個の手筋を深さ優先で全数探索し、n個のどの手筋でも解決できない盤面が現われると1段階前の盤面に戻り、前回までに適用していない手筋を使って手を進めようとします。適用できる手筋がなかった場合は更に1段階前の盤面に戻ります。以上を繰り返し、最初の盤面に対して適用できる n個の手筋が尽きたときに「nil」を返します(解に到達したときは前述のように解に至る手筋のリストを返します)。
ノードAとノードBの間にstrong linkが成立するとは
・AとBが同じハウス(行・列・ブロックのいずれか)に属す。
・AとBがstrong inferenceを満たす。
ことです。strong inferenceを満たすとは
・if A is false, then B is true.
・if B is false, then A is true.
を満たすことです。
Almost Locked Set(XY-Wing,XYZ-WingなどのWing系手筋の一般系)に加えて、Grid-Based Almost Locked Set(Sashimi Fish,Finned Fishの一般系)を追加実装した版の数独解法プログラム(=NumberPlace.lisp)がほぼ完成しました。現在実装している手筋は