file: cdt.t package: muf status: alpha
True if mom
can be reached from kid
by following zero or more kid$s.parents
pointers. If kid$s.parents
is a vector,
then all pointers in the vector are checked
recursively.
This function is hand-assembled into the db by cdt.t
because .lib.muf.]doSignal
needs it,
and we want .lib.muf.]doSignal
functioning as soon as the server starts
executing code.
The source is effectively
: childOf2? -> n -> mom -> kid do{ mom kid = if t n return fi n 0 = if nil n return fi n 1 - -> n kid$s.parents -> parents parents vector? if parents foreach i kid do{ kid mom n childOf2? -> n if t n return fi n 0 = if nil n return fi n 1 - -> n } nil n return else parents -> kid fi } ; : childOf? 512 childOf2? pop ;
where the limit of checking 512 parents is to keep
accidental or deliberate parenting loops from
hanging childOf?
and hence
.lib.muf.]doSignal
in an infinite loop.
See section ]doSignal.
Go to the first, previous, next, last section, table of contents.