Хэш-символ lisp заменяет возвращаемые значения
Я пытался построить что-то похожее на древовидную структуру в ширину для графа, который содержит все возможные пути от данного узла. У меня не было проблем с алгоритмом, как с какой-то ошибкой, которая появляется. Вот соответствующий код ниже:
(set 'my-graph '((A (B C))
(B (D E))
(C (F G))
(D (E))
(E (H))
(F (H I))
(G (I))
(H (J))
(I (J))
(J ())))
(defun search-tree(graph traversed visited)
(cond
((null traversed) NIL)
(:else (let*
((new-visited (append visited (list (car traversed))))
(children (add-children graph (car traversed)
(append (cdr traversed) new-visited))))
(cond
((null children) (list (car traversed)))
(:else
(cons (car traversed)
(mapcar (lambda(x) (search-tree graph (list x) new-visited)) children)))
)
)
)
)
)
;;; Selects the node to pick returned children from
(defun add-children(graph node visited)
(cond
((null graph) NIL)
((equal (caar graph) node) (new-nodes (cadar graph) visited))
(:else (add-children (cdr graph) node visited))
)
)
;;; Returns new, unvisited nodes from the children of a node
(defun new-nodes(children visited)
(cond
((null children) NIL)
((member (car children) visited) (new-nodes (cdr children) visited))
(:else (cons (car children) (new-nodes (cdr children) visited)))
)
)
Дерево поиска функции называется as (дерево поиска my-graph '(A) '()) и возвращает почти все, как я хочу, но первый терминальный узел заменяется символом # (это должно быть (J)). В чем может быть проблема здесь?
Это возвращаемое значение.(A (B (D (E (H #))) (E (H (J)))) (C (F (H (J)) (I (J))) (G (I (J)))))
Я попытался отследить код, но до сих пор не понимаю, почему список (J) поменялся местами в середине рекурсии с символом #.
1 ответ
Обычно я думаю, что это как-то связано с *print-level*
,
Эта переменная контролирует, как глубоко вложенные списки печатаются. Установите это число для уровня. Списки на более глубоком уровне заменяются на #
персонаж.
Если установить это NIL
не помогает, тогда вы можете также обратиться к руководству по Allegro CL - я могу удаленно помнить, что в среде IDE также есть свои собственные настройки.