実験

(define (queens)
  (let ((q1 (amb 1 2 3 4 5 6 7 8))
        (q2 (amb 1 2 3 4 5 6 7 8))
        (q3 (amb 1 2 3 4 5 6 7 8))
        (q4 (amb 1 2 3 4 5 6 7 8))
        (q5 (amb 1 2 3 4 5 6 7 8))
        (q6 (amb 1 2 3 4 5 6 7 8))
        (q7 (amb 1 2 3 4 5 6 7 8))
        (q8 (amb 1 2 3 4 5 6 7 8)))
    (require (distinct? (list q1 q2 q3 q4 q5 q6 q7 q8)))
    (list q1 q2 q3 q4 q5 q6 q7 q8)))
  • これだと最初の答え(1 2 3 4 5 6 7 8)が出るまでに20秒くらいかかる
  • ななめ判定を加えるとかなり遅くなるはず
  • 一方、きのう書いた多段letのやつは最初の8queenが一瞬で出てくる
  • ということで、問題4.44は、オーダーが大きくなると多段letじゃないと苦しいという例だと理解