hash-sets: separate <hash-set> and >hash-set to match other containers. Fixes #154.

db4
John Benediktsson 2011-10-19 11:35:25 -07:00
parent f4a6e10818
commit beb5b9bf64
4 changed files with 16 additions and 10 deletions

View File

@ -1,11 +1,11 @@
USING: help.markup help.syntax sequences ; USING: help.markup help.syntax math sequences ;
IN: hash-sets IN: hash-sets
ARTICLE: "hash-sets" "Hash sets" ARTICLE: "hash-sets" "Hash sets"
"The " { $vocab-link "hash-sets" } " vocabulary implements hashtable-backed sets. Hash sets form a class:" "The " { $vocab-link "hash-sets" } " vocabulary implements hashtable-backed sets. Hash sets form a class:"
{ $subsection hash-set } { $subsections hash-set }
"Constructing new hash sets:" "Constructing new hash sets:"
{ $subsection <hash-set> } { $subsections <hash-set> >hash-set }
"The syntax for hash sets is described in " { $link "syntax-hash-sets" } "." ; "The syntax for hash sets is described in " { $link "syntax-hash-sets" } "." ;
ABOUT: "hash-sets" ABOUT: "hash-sets"
@ -14,5 +14,9 @@ HELP: hash-set
{ $class-description "The class of hashtable-based sets. These implement the " { $link "sets" } "." } ; { $class-description "The class of hashtable-based sets. These implement the " { $link "sets" } "." } ;
HELP: <hash-set> HELP: <hash-set>
{ $values { "capacity" number } { "hash-set" hash-set } }
{ $description "Creates a new hash set capable of storing " { $snippet "capacity" } " elements before growing." } ;
HELP: >hash-set
{ $values { "members" sequence } { "hash-set" hash-set } } { $values { "members" sequence } { "hash-set" hash-set } }
{ $description "Creates a new hash set with the given members." } ; { $description "Creates a new hash set with the given members." } ;

View File

@ -8,7 +8,10 @@ IN: hash-sets
! In a better implementation, less memory would be used ! In a better implementation, less memory would be used
TUPLE: hash-set { table hashtable read-only } ; TUPLE: hash-set { table hashtable read-only } ;
: <hash-set> ( members -- hash-set ) : <hash-set> ( capacity -- hash-set )
<hashtable> hash-set boa ; inline
: >hash-set ( members -- hash-set )
unique hash-set boa ; inline unique hash-set boa ; inline
INSTANCE: hash-set set INSTANCE: hash-set set
@ -16,12 +19,12 @@ M: hash-set in? table>> key? ; inline
M: hash-set adjoin table>> dupd set-at ; inline M: hash-set adjoin table>> dupd set-at ; inline
M: hash-set delete table>> delete-at ; inline M: hash-set delete table>> delete-at ; inline
M: hash-set members table>> keys ; inline M: hash-set members table>> keys ; inline
M: hash-set set-like drop dup hash-set? [ members <hash-set> ] unless ; M: hash-set set-like drop dup hash-set? [ members >hash-set ] unless ;
M: hash-set clone table>> clone hash-set boa ; M: hash-set clone table>> clone hash-set boa ;
M: hash-set null? table>> assoc-empty? ; M: hash-set null? table>> assoc-empty? ;
M: hash-set cardinality table>> assoc-size ; M: hash-set cardinality table>> assoc-size ;
M: sequence fast-set <hash-set> ; M: sequence fast-set >hash-set ;
M: f fast-set drop H{ } clone hash-set boa ; M: f fast-set drop H{ } clone hash-set boa ;
M: sequence duplicates M: sequence duplicates
@ -35,5 +38,4 @@ M: sequence duplicates
PRIVATE> PRIVATE>
M: sequence all-unique? M: sequence all-unique?
dup length <hashtable> hash-set boa dup length <hash-set> [ (all-unique?) ] curry all? ;
[ (all-unique?) ] curry all? ;

View File

@ -104,7 +104,7 @@ IN: bootstrap.syntax
"H{" [ \ } [ >hashtable ] parse-literal ] define-core-syntax "H{" [ \ } [ >hashtable ] parse-literal ] define-core-syntax
"T{" [ parse-tuple-literal suffix! ] define-core-syntax "T{" [ parse-tuple-literal suffix! ] define-core-syntax
"W{" [ \ } [ first <wrapper> ] parse-literal ] define-core-syntax "W{" [ \ } [ first <wrapper> ] parse-literal ] define-core-syntax
"HS{" [ \ } [ <hash-set> ] parse-literal ] define-core-syntax "HS{" [ \ } [ >hash-set ] parse-literal ] define-core-syntax
"POSTPONE:" [ scan-word suffix! ] define-core-syntax "POSTPONE:" [ scan-word suffix! ] define-core-syntax
"\\" [ scan-word <wrapper> suffix! ] define-core-syntax "\\" [ scan-word <wrapper> suffix! ] define-core-syntax

View File

@ -58,7 +58,7 @@ TUPLE: (astar) astar goal origin in-open-set open-set ;
: (init) ( from to astar -- ) : (init) ( from to astar -- )
swap >>goal swap >>goal
H{ } clone over astar>> g<< H{ } clone over astar>> g<<
{ } <hash-set> over astar>> in-closed-set<< HS{ } clone over astar>> in-closed-set<<
H{ } clone >>origin H{ } clone >>origin
H{ } clone >>in-open-set H{ } clone >>in-open-set
<min-heap> >>open-set <min-heap> >>open-set