Задача 19-2 в «Лиспе» Уинстона и Хорна,
При поиске в глубину все
частичные пути в очереди на данный
точки в поиске связаны с
друг друга по-простому: каждый
расширение на один узел
частичный путь после него в очереди.
Например, очередь может выглядеть
как это:
((D C B A) (C B A) (B A) (A))
Однако я не понимаю, как это так. Например, я получаю вывод
как следующее:
(depth-first 's 'f)
queue: ((S))
(S)
queue: ((A S) (D S))
(S A)
queue: ((B A S) (D A S) (D S))
(S A B)
queue: ((C B A S) (E B A S) (D A S) (D S))
(S A B C)
queue: ((E B A S) (D A S) (D S))
(S A B E)
queue: ((D E B A S) (F E B A S) (D A S) (D S))
(S A B E D)
queue: ((F E B A S) (D A S) (D S))
(S A B E F)
, где я помещаю оператор print в начале процедуры:
(defun depth-first (start finish &optional
(queue (list (list start))))
(format t "~%queue: ~a" queue)
(cond ((endp queue) nil)
((eq finish (first (first queue)))
(reverse (first queue)))
(t (depth-first
start
finish
(append (extend (first queue))
(rest queue))))))
В этом случае частичный путь в очереди не является расширением на единицу
узел частичного пути после него в очереди.
Это опечатка в упражнении или есть какой-то вклад, который делает
на самом деле дать очередь он дает?