factor/extra/trees/trees-docs.factor

240 lines
8.0 KiB
Factor

USING: arrays assocs help.markup help.syntax kernel math ;
IN: trees
HELP: TREE{
{ $syntax "TREE{ { key value }... }" }
{ $values { "key" "a key" } { "value" "a value" } }
{ $description "Literal syntax for an unbalanced tree." } ;
HELP: <tree>
{ $values { "tree" tree } }
{ $description "Creates an empty unbalanced binary tree" } ;
HELP: >tree
{ $values { "assoc" assoc } { "tree" tree } }
{ $description "Converts any " { $link assoc } " into an unbalanced binary tree. If the input assoc is any kind of " { $link tree } ", the elements are added in level order (breadth-first search) to copy it's shape." } ;
HELP: tree
{ $class-description "This is the class for unbalanced binary search trees. It is not usually intended to be used directly but rather as a basis for other trees." } ;
HELP: height
{ $values
{ "tree" tree }
{ "n" integer }
}
{ $description "Returns the height of " { $snippet "tree" } "." } ;
HELP: headtree>alist[)
{ $values
{ "to-key" "a key" } { "tree" tree }
{ "alist" "an array of key/value pairs" }
}
{ $description "Returns an alist of the portion of this tree whose keys are strictly less than to-key." } ;
HELP: headtree>alist[]
{ $values
{ "to-key" "a key" } { "tree" tree }
{ "alist" "an array of key/value pairs" }
}
{ $description "Returns an alist of the portion of this tree whose keys are less than or equal to to-key." } ;
HELP: subtree>alist()
{ $values
{ "from-key" "a key" } { "to-key" "a key" } { "tree" tree }
{ "alist" "an array of key/value pairs" }
}
{ $description "Returns an alist of the portion of this map whose keys range from fromKey (exclusive) to toKey (exclusive)." } ;
HELP: subtree>alist(]
{ $values
{ "from-key" "a key" } { "to-key" "a key" } { "tree" tree }
{ "alist" "an array of key/value pairs" }
}
{ $description "Returns an alist of the portion of this map whose keys range from fromKey (exclusive) to toKey (inclusive)." } ;
HELP: subtree>alist[)
{ $values
{ "from-key" "a key" } { "to-key" "a key" } { "tree" tree }
{ "alist" "an array of key/value pairs" }
}
{ $description "Returns an alist of the portion of this map whose keys range from fromKey (inclusive) to toKey (exclusive)." } ;
HELP: subtree>alist[]
{ $values
{ "from-key" "a key" } { "to-key" "a key" } { "tree" tree }
{ "alist" "an array of key/value pairs" }
}
{ $description "Returns an alist of the portion of this map whose keys range from fromKey (inclusive) to toKey (inclusive)." } ;
HELP: tailtree>alist(]
{ $values
{ "from-key" "a key" } { "tree" tree }
{ "alist" "an array of key/value pairs" }
}
{ $description "Returns an alist of the portion of this tree whose keys are strictly greater than to-key." } ;
HELP: tailtree>alist[]
{ $values
{ "from-key" "a key" } { "tree" tree }
{ "alist" "an array of key/value pairs" }
}
{ $description "Returns an alist of the portion of this tree whose keys are greater than or equal to to-key." } ;
{
headtree>alist[) headtree>alist[] tailtree>alist(] tailtree>alist[]
subtree>alist() subtree>alist(] subtree>alist[) subtree>alist[]
} related-words
HELP: ceiling-entry
{ $values
{ "key" "a key" } { "tree" tree }
{ "pair/f" { $maybe pair } }
}
{ $description "Returns a key-value mapping associated with the least key greater than or equal to the given key, or " { $link f } " if there is no such key." } ;
HELP: ceiling-key
{ $values
{ "key" "a key" } { "tree" tree }
{ "key/f" { $maybe "a key" } }
}
{ $description "Returns the least key greater than or equal to the given key, or " { $link f } " if there is no such key." } ;
HELP: floor-entry
{ $values
{ "key" "a key" } { "tree" tree }
{ "pair/f" { $maybe pair } }
}
{ $description "Returns a key-value mapping associated with the greatest key less than or equal to the given key, or " { $link f } " if there is no such key." } ;
HELP: floor-key
{ $values
{ "key" "a key" } { "tree" tree }
{ "key/f" { $maybe "a key" } }
}
{ $description "Returns the greatest key less than or equal to the given key, or " { $link f } " if there is no such key." } ;
HELP: higher-entry
{ $values
{ "key" "a key" } { "tree" tree }
{ "pair/f" { $maybe pair } }
}
{ $description "Returns a key-value mapping associated with the least key strictly greater than the given key, or " { $link f } " if there is no such key." } ;
HELP: higher-key
{ $values
{ "key" "a key" } { "tree" tree }
{ "key/f" { $maybe "a key" } }
}
{ $description "Returns the least key strictly greater than the given key, or " { $link f } " if there is no such key." } ;
HELP: lower-entry
{ $values
{ "key" "a key" } { "tree" tree }
{ "pair/f" { $maybe pair } }
}
{ $description "Returns a key-value mapping associated with the greatest key strictly less than the given key, or " { $link f } " if there is no such key." } ;
HELP: lower-key
{ $values
{ "key" "a key" } { "tree" tree }
{ "key/f" { $maybe "a key" } }
}
{ $description "Returns the greatest key strictly less than the given key, or " { $link f } " if there is no such key." } ;
{ lower-key lower-entry higher-key higher-entry
floor-key floor-entry ceiling-key ceiling-entry } related-words
HELP: last-entry
{ $values
{ "tree" tree }
{ "pair/f" { $maybe pair } }
}
{ $description "Returns a key-value mapping associated with the last (highest) key in this tree, or " { $link f } " if the tree is empty." } ;
HELP: last-key
{ $values
{ "tree" tree }
{ "key/f" { $maybe "a key" } }
}
{ $description "Returns the last (highest) key in this tree, or " { $link f } " if the tree is empty." } ;
HELP: first-entry
{ $values
{ "tree" tree }
{ "pair/f" { $maybe pair } }
}
{ $description "Returns a key-value mapping associated with the first (lowest) key in this tree, or " { $link f } " if the tree is empty." } ;
HELP: first-key
{ $values
{ "tree" tree }
{ "key/f" { $maybe pair } }
}
{ $description "Returns the first (lowest) key in this tree, or " { $link f } " if the tree is empty." } ;
{ first-key first-entry last-key last-entry } related-words
HELP: pop-tree-left
{ $values
{ "tree" tree }
{ "node/f" { $maybe pair } }
}
{ $description "Removes and returns a key-value mapping associated with the lowest key in this map, or " { $link f } " if the map is empty." } ;
HELP: pop-tree-right
{ $values
{ "tree" tree }
{ "node/f" { $maybe pair } }
}
{ $description "Removes and returns a key-value mapping associated with the highest key in this map, or " { $link f } " if the map is empty." } ;
{ pop-tree-left pop-tree-right } related-words
HELP: slurp-tree-left
{ $values
{ "tree" tree } { "quot" { $quotation ( ... entry -- ... ) } }
}
{ $description "Removes entries from a tree from the left (lowest key) and processes them with the quotation until the tree is empty." } ;
HELP: slurp-tree-right
{ $values
{ "tree" tree } { "quot" { $quotation ( ... entry -- ... ) } }
}
{ $description "Removes entries from a tree from the right (highest key) and processes them with the quotation until the tree is empty." } ;
{ slurp-tree-left slurp-tree-right } related-words
ARTICLE: "trees" "Binary search trees"
"The " { $vocab-link "trees" } " vocabulary is a library for unbalanced binary search trees. A " { $link tree } " is not intended to be used directly in most situations but rather as a base class for new trees, because performance can degrade to linear time storage/retrieval by the number of keys. These binary search trees conform to the assoc protocol."
$nl
"Constructing trees:"
{ $subsections
<tree>
>tree
POSTPONE: TREE{
}
"Operations on trees: "
{ $subsections
height
first-entry first-key
last-entry last-key
}
"Range operations on trees:"
{ $subsections
headtree>alist[) headtree>alist[] tailtree>alist(] tailtree>alist[]
subtree>alist() subtree>alist(] subtree>alist[) subtree>alist[]
}
"Navigation operations on trees:"
{ $subsections
lower-key lower-entry higher-key higher-entry
floor-key floor-entry ceiling-key ceiling-entry
}
"Pop/Slurp operations on trees:"
{ $subsections
pop-tree-left pop-tree-right
slurp-tree-left slurp-tree-right
}
;
ABOUT: "trees"