ich in einer meiner Funktionen eine neue Warteschlange zu erstellen bin versucht, aber ich bin Fehler immerin einer Funktion definieren Warteschlange
definieren: eine Definition gefunden, die nicht auf der obersten Ebene ist
Wie kann ich das beheben? Ich muss diese Warteschlange irgendwo innerhalb erstellen. Ich kann nicht einfach Hilfsvariablen außerhalb davon erstellen.
(define (bfs-graph X G)
(define q (make-queue))
(enqueue! q X)
... some work with queue
)
(define (reachable? X Y G)
(cond
[(empty? (graph-edges G)) #f]
[else (bfs-graph X G)]
)
)
EDIT:
Ok, das scheint, wie es funktioniert. Ich werde versuchen, mit dem Code etwas mehr zu spielen. Vielen Dank.
(define (reachable? X Y G)
(let ((q (make-queue)))
(cond
[(empty? (graph-edges G)) #f]
[else (bfs-graph X G q)]
)
)
)
(define (bfs-graph X G q)
(enqueue! q X)
)
Haben Sie eine neue, andere Warteschlange jedes Mal 'bfs-graph' genannt erstellen möchten ist, oder die gleiche Warteschlange wiederzuverwenden zwischen verschiedene Aufrufe von 'bfs -Graph? –
Nun, da ich daran denke, werde ich bfs-graph rekursiv wiederverwenden. Ich versuche es, da Sie vielleicht alle Nachbarn eines gegebenen Eckpunktes gefunden haben und ich setze sie in eine Warteschlange, also hätte ich gerne dieselbe Warteschlange, die ich mit neuen Werten anhängen könnte. – Arcane
Dann ist es eine bessere Idee, die Queue außerhalb der Prozedur zu erstellen und sie als Parameter von der Prozedur, die die Berechnung startet, weiterzugeben. –