Это домашнее задание вопрос, я пытаюсь сделать Depth-первой функцию поиска в схеме, Вот код, который я написал до сих пор:Схема глубины первого поиск функции графа
(define explore
(λ(node visited)
(let* ([neighbors (force (cdr node))]
[next (nextNode visited neighbors)]
[is-visited (member? node visited)])
(cond
;if I have no unvisited neighbours print current node and go up one level
[(equal? next #f)
(begin
(display (car node))
(display " "))]
;if current node is not visited and I have unvisited neighbors
;print current node,mark as visited and visit it's neighbors
[(and (equal? is-visited #f) (not (equal? next #f)))
(begin
(display (car node))
(display " ")
(explore next (cons node visited)))])
;go and visit the next neighbor
(if (not (equal? (nextNode (cons next visited) neighbors) #f))
(explore (nextNode (cons next visited) neighbors) (cons node visited))))))
«узел» является текущим узлом
«посетил» список в ведьму я следить за узлы, которые я посетил
«NextNode» является функцией, которая возвращает первый непосещенные соседа, если любой или #f иначе
«члена? ' тест выполняется, если узел находится в посещаемой списке
Представление графа используется смежно с использованием ссылки на узлы с letrec так вот почему я использую силу в «соседей»: Eg:
(letrec ([node1 (список " NY »(delay (list node2 node3)))], где node2 и node3 определены как node1
Проблема, с которой я имею дело, заключается в том, что мои посещаемые списки теряют следы некоторых узлов, которые я посетил, когда я прихожу из рекурсии Как я могу это исправить?
Кажется, что этот пост - это просто расширение: http: //stackoverflow.com/questions/2773878/scheme-accumulative-recursion-with-lists. Вы должны рассмотреть вопрос о закрытии. – Davorak