From 2b8a9709a6ca8db1db9782958bea87dbfdc4c159 Mon Sep 17 00:00:00 2001 From: jottbee Date: Mon, 11 Apr 2005 19:47:05 +0000 Subject: [PATCH] written new, no need for set! any longer --- dfs.scm | 167 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 95 insertions(+), 72 deletions(-) diff --git a/dfs.scm b/dfs.scm index d3216a9..5cdeb0a 100644 --- a/dfs.scm +++ b/dfs.scm @@ -23,8 +23,6 @@ (cons item ls) (cons (car ls) (insert pred item (cdr ls))))) -(define time 0) - (define-enumerated-type color :color is-color? the-colors @@ -70,11 +68,29 @@ (define (dfs->list dfs-node) (list (dfs-name dfs-node) (dfs-adjacencies dfs-node) (dfs-ignored dfs-node))) -(define (dfs-lookup-node pred node-name dag) +(define (resolve-adj pred adj dag) (find (lambda (candidate) - (pred (dfs-name candidate) node-name)) + (pred (dfs-name candidate) adj)) dag)) +(define (replace-node dag old new) + (let ((new-dag (delete old dag))) + (cons new new-dag))) + +(define (paint-node node color) + (let ((name (dfs-name node)) + (adjs (dfs-adjacencies node)) + (time (dfs-ftime node)) + (ignored (dfs-ignored node))) + (really-make-dfs name adjs color time ignored))) + +(define (set-ftime node ftime) + (let ((name (dfs-name node)) + (adjs (dfs-adjacencies node)) + (color (dfs-color node)) + (ignored (dfs-ignored node))) + (really-make-dfs name adjs color ftime ignored))) + ;;; ;;; DEPTH FIRST SEARCH: ;;; =================== @@ -111,75 +127,82 @@ ;;; sorted-dag : the sorted dag ;;; (define (dfs dag . maybe-args) - (let-optionals maybe-args ((pred string=?) - (auto-leafs? #t) - (create-leaf (lambda (unresolved-adj-id) - ;; (display "unresolved adjecency: ") - ;; (display unresolved-adj-id) - ;; (newline) - (make-dfs unresolved-adj-id '() #f)))) - (set! time 0) - (let ((node-names (map dfs-name dag))) - (if (not (null? node-names)) - ;; (sort pred todo-list done-list) - (sort (lambda (current position) - (< (dfs-ftime current) (dfs-ftime position))) - ;; - ;; the result of this should be the dag with the ftimes - ;; - (let for-all-nodes ((node-name (car node-names)) - (nodes-to-do (cdr node-names)) - (current-dag dag)) - (let ((current-node (dfs-lookup-node pred node-name current-dag))) - (cond - ((eq? (dfs-color current-node) (color white)) - (let ((new-dag (dfs-visit current-dag current-node - pred auto-leafs? create-leaf))) - (if (not (null? nodes-to-do)) - (for-all-nodes (car nodes-to-do) - (cdr nodes-to-do) - new-dag) - new-dag))) - (else (if (not (null? nodes-to-do)) - (for-all-nodes (car nodes-to-do) - (cdr nodes-to-do) - current-dag) - current-dag))))) - '()) - node-names)))) + (let-optionals maybe-args + ((pred string=?) + (auto-leafs? #t) + (create-leaf (lambda (unresolved-adj) + (make-dfs unresolved-adj '() #f)))) + (let ((ftime