Rdb: Ruby-Nachbau der MWC /rdb-Werkzeuge
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
.TH searchtree "" "" "/rdb Command"
|
||||
.PC "Seek a string node in tree table"
|
||||
\fBsearchtree [-m[bhirs]] \fItable root goal column1 column2\fR
|
||||
.PP
|
||||
.II "directory^search"
|
||||
.II "tree^search"
|
||||
.II PROLOG
|
||||
The command
|
||||
.B searchtree
|
||||
searches
|
||||
.I table
|
||||
to see if string
|
||||
.I root
|
||||
in
|
||||
.I column1
|
||||
is associated with
|
||||
.I goal
|
||||
in
|
||||
.IR column2 .
|
||||
It returns
|
||||
TRUE to the shell if it find that
|
||||
.I root
|
||||
is associated with
|
||||
.IR goal ,
|
||||
or FALSE if it is not.
|
||||
.PP
|
||||
.I goal
|
||||
may be within
|
||||
.IR table ,
|
||||
in which case the COHERENT command
|
||||
.B grep
|
||||
can also find it;
|
||||
.BR searchtree ,
|
||||
however, will also see if
|
||||
.I goal
|
||||
be reached by a path from
|
||||
.IR root .
|
||||
.PP
|
||||
The options
|
||||
.B \-m[bhirs]
|
||||
name the fast-access method to use.
|
||||
The default is sequential (\fB\-ms\fR).
|
||||
See the entry for the command
|
||||
.B search
|
||||
for a full description of each method of searching.
|
||||
.PP
|
||||
.B searchtree
|
||||
is a breadth-first search that uses the
|
||||
.B search
|
||||
fast-access methods to find all of the children at each level of a tree.
|
||||
This is the kind of search often done in artificial intelligence programs.
|
||||
However,
|
||||
.B searchtree
|
||||
stores its data in a temporary file rather than in memory,
|
||||
so that it will work on very large data bases.
|
||||
.PP
|
||||
Because
|
||||
.B searchtree
|
||||
is a shell script, you can modify it to serve many kinds of searches.
|
||||
For example, you can add a message like
|
||||
.I yes/no
|
||||
or
|
||||
.IR true/false .
|
||||
You can also add shell code to print out a path.
|
||||
You might want to use heuristics to guide the search at each
|
||||
level, and side effects to update data or print messages along the way.
|
||||
.PP
|
||||
This kind of searching is also used by the PROLOG language.
|
||||
.BR searchtree ,
|
||||
however, differs from PROLOG in two significant respects.
|
||||
First, PROLOG must have its data base in memory, which
|
||||
limits the size of the database it can handle.
|
||||
Second, PROLOG uses depth-first searching, which requires it to backtrack.
|
||||
.SH Example
|
||||
Consider the tree represented by table
|
||||
.BR isa ,
|
||||
as follows:
|
||||
.DM
|
||||
Name Isa
|
||||
---- ---
|
||||
barbara human
|
||||
bill human
|
||||
evan human
|
||||
rod human
|
||||
human primate
|
||||
primate mammal
|
||||
cat mammal
|
||||
dog mammal
|
||||
mammal animal
|
||||
bird animal
|
||||
fish animal
|
||||
animal lifeform
|
||||
plant lifeform
|
||||
.DE
|
||||
.PP
|
||||
Remember that all trees, in fact all graphs, can be listed
|
||||
as tables when the nodes (vertices)
|
||||
that are connected by a line (arcs) that is on each row.
|
||||
A directional graph is handled by having one column be
|
||||
.B From
|
||||
and another be
|
||||
.BR To .
|
||||
.PP
|
||||
The following command uses
|
||||
.B searchtree
|
||||
to examine table
|
||||
.B isa
|
||||
to see if entity
|
||||
.B rod
|
||||
in column
|
||||
.B Name
|
||||
is of type
|
||||
.B lifeform
|
||||
as given in column
|
||||
.BR Isa :
|
||||
.DM
|
||||
searchtree isa rod lifeform Name Isa ; echo $?
|
||||
.DE
|
||||
.PP
|
||||
The command
|
||||
.B "echo $?"
|
||||
prints the value returned by
|
||||
.BR searchtree .
|
||||
In this case, you see `0' (or FALSE), because
|
||||
.B rod
|
||||
is not a
|
||||
.BR lifeform ;
|
||||
rather it (or he) is a
|
||||
.BR human .
|
||||
.PP
|
||||
Because
|
||||
.B searchtree
|
||||
returns only a status code, you can use it as a test condition.
|
||||
Your shell program could have a statement like this:
|
||||
.DM
|
||||
prompt "What is your name: "
|
||||
read NAME
|
||||
if searchtree isa $NAME lifeform Name Isa
|
||||
then
|
||||
echo "So, I am talking to a lifeform."
|
||||
else
|
||||
echo "So, I am talking to another machine."
|
||||
fi
|
||||
.DE
|
||||
.PP
|
||||
The following gives an sample exchange with this script; text in \fBbold\fR
|
||||
gives what the user types:
|
||||
.DM
|
||||
What is your name: \fBrod\fP
|
||||
So, I am talking to a lifeform.
|
||||
.DE
|
||||
.PP
|
||||
The result of the search of the tree was tested by the
|
||||
.B if
|
||||
statement, and used to decide which message to print.
|
||||
.SH "See Also"
|
||||
.B
|
||||
search
|
||||
.R
|
||||
.SH Notes
|
||||
.II COHware
|
||||
If you wish to experiment with PROLOG, volume 2 of
|
||||
.B COHware
|
||||
includes the source code to a PROLOG interpreter.
|
||||
.SO searchtree
|
||||
Reference in New Issue
Block a user