From 14d1da94bb5f04211190667852a964405b83b0f1 Mon Sep 17 00:00:00 2001
From: Samuel Tardieu <sam@rfc1149.net>
Date: Wed, 17 Mar 2010 10:50:45 +0100
Subject: [PATCH 1/2] Use sets

---
 extra/astar/astar.factor | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/extra/astar/astar.factor b/extra/astar/astar.factor
index 45f8aaa86e..85b3108217 100644
--- a/extra/astar/astar.factor
+++ b/extra/astar/astar.factor
@@ -1,6 +1,6 @@
 ! Copyright (C) 2010 Samuel Tardieu.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors assocs heaps kernel math sequences sets shuffle ;
+USING: accessors assocs hash-sets heaps kernel math sequences sets shuffle ;
 IN: astar
 
 ! This implements the A* algorithm. See http://en.wikipedia.org/wiki/A*
@@ -24,10 +24,10 @@ TUPLE: (astar) astar goal origin in-open-set open-set ;
     (add-to-open-set) ;
 
 : ?add-to-open-set ( node astar -- )
-    2dup astar>> in-closed-set>> key? [ 2drop ] [ add-to-open-set ] if ;
+    2dup astar>> in-closed-set>> in? [ 2drop ] [ add-to-open-set ] if ;
 
 : move-to-closed-set ( node astar -- )
-    [ astar>> in-closed-set>> conjoin ] [ in-open-set>> delete-at ] 2bi ;
+    [ astar>> in-closed-set>> adjoin ] [ in-open-set>> delete-at ] 2bi ;
 
 : get-first ( astar -- node )
     [ open-set>> heap-pop drop dup ] [ move-to-closed-set ] bi ;
@@ -58,7 +58,7 @@ TUPLE: (astar) astar goal origin in-open-set open-set ;
 : (init) ( from to astar -- )
     swap >>goal
     H{ } clone over astar>> (>>g)
-    H{ } clone over astar>> (>>in-closed-set)
+    { } <hash-set> over astar>> (>>in-closed-set)
     H{ } clone >>origin
     H{ } clone >>in-open-set
     <min-heap> >>open-set
@@ -78,4 +78,4 @@ PRIVATE>
     astar-simple new swap >>heuristic swap >>cost swap >>neighbours ;
 
 : considered ( astar -- considered )
-    in-closed-set>> keys ;
+    in-closed-set>> members ;

From f62d414bd15c8d128ce9414e28046e91069ca1c2 Mon Sep 17 00:00:00 2001
From: Samuel Tardieu <sam@rfc1149.net>
Date: Tue, 23 Mar 2010 09:30:48 +0100
Subject: [PATCH 2/2] Add some documentation precisions for astar

---
 extra/astar/astar-docs.factor | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/extra/astar/astar-docs.factor b/extra/astar/astar-docs.factor
index d19166c1bf..7c474bdb57 100644
--- a/extra/astar/astar-docs.factor
+++ b/extra/astar/astar-docs.factor
@@ -62,8 +62,7 @@ HELP: find-path
     ", or f if no such path exists" }
 }
 { $description "Find a path between " { $snippet "start" } " and " { $snippet "target" }
-  " using the A* algorithm. The " { $snippet "astar" } " tuple must have been previously "
-  " built using " { $link <astar> } "."
+  " using the A* algorithm."
 } ;
 
 HELP: considered
@@ -77,6 +76,7 @@ HELP: considered
 
 ARTICLE: "astar" "A* algorithm"
 "The " { $vocab-link "astar" } " vocabulary implements a graph search algorithm for finding the least-cost path from one node to another." $nl
+"The " { $link astar } " tuple may be derived from and its " { $link cost } ", " { $link heuristic } ", and " { $link neighbours } " methods overwritten, or the " { $link <astar> } " word can be used to build such an object from quotations." $nl
 "Make an A* object:"
 { $subsections <astar> }
 "Find a path between nodes:"