(FILECREATED "18-Jun-86 09:59:16" {QV}<NOTECARDS>1.3K>KIRKPATCH007.;1 1920   

      changes to:  (VARS KIRKPATCH007COMS x))


(* Copyright (c) 1986 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT KIRKPATCH007COMS)

(RPAQQ KIRKPATCH007COMS ((* * Changes to NCPROGINT so gathering structures BLOCK)
			   (FNS NCP.ComputeTransitiveClosure NCP.GetChildren)))
(* * Changes to NCPROGINT so gathering structures BLOCK)

(DEFINEQ

(NCP.ComputeTransitiveClosure
  (LAMBDA (startNodes linkTypes depthCutOff)                 (* kirk: "17-Jun-86 12:14")

          (* * Given a set of starting nodes, compute the transitive closure of these links.)



          (* * Uses the simplest, stupidest, but most understandable algorithm)



          (* * kirk 9Apr86 added a depth and call on NCP.GetChildren)



          (* * kirk 24Apr86 Changed so 0 depth is a way to make this a noOp)



          (* * kirk 17Jun86 Added BLOCK)


    (if (NLISTP startNodes)
	then (SETQ startNodes (LIST startNodes)))
    (LET ((markedNodes startNodes)
	  (unvisitedNodes startNodes))
         (for depth from 1 to depthCutOff while unvisitedNodes
	    do                                             (* what nodes have we not yet seen?)
		 (BLOCK)
		 (SETQ unvisitedNodes (LDIFFERENCE (NCP.GetChildren unvisitedNodes linkTypes)
						       markedNodes))
		 (SETQ markedNodes (UNION markedNodes unvisitedNodes)))
         (INTERSECTION markedNodes markedNodes))))

(NCP.GetChildren
  (LAMBDA (nodes links)                                      (* kirk: "17-Jun-86 12:14")
    (for link in (NCP.GetLinks nodes NIL links) collect (PROGN (BLOCK)
									 (NCP.GetLinkDestination
									   link)))))
)
(PUTPROPS KIRKPATCH007 COPYRIGHT ("Xerox Corporation" 1986))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (443 1837 (NCP.ComputeTransitiveClosure 453 . 1565) (NCP.GetChildren 1567 . 1835)))))
STOP