Q о проблеме 19-2 в "Lisp" Уинстона и Хорна - PullRequest
1 голос
/ 28 августа 2010

Задача 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)))))) 

В этом случае частичный путь в очереди не является расширением на единицу узел частичного пути после него в очереди. Это опечатка в упражнении или есть какой-то вклад, который делает на самом деле дать очередь он дает?

1 Ответ

0 голосов
/ 29 августа 2010

См. ответ Паскаля Бургиньона.

...