Jump to user comments
1. An expression which depends on its own value or a technique
to detect such expressions. In graph reduction, when the
reduction of an expression is begun, the root of the
expression can be overwritten with a black hole. If the
expression depends on its own value, e.g.
x = x + 1
then it will try to evaluate the black hole which will usually
print an error message and abort the program. A secondary
effect is that, once the root of the expression has been
black-holed, parts of the expression which are no longer
required may be freed for garbage collection.
Without black holes the usual result of attempting to evaluate
an expression which depends on itself would be a stack
overflow. If the expression is evaluated successfully then
the black hole will be updated with the value.
Expressions such as
ones = 1 : ones
are not black holes because the list constructor, : is lazy so
the reference to ones is not evaluated when evaluating ones to
WHNF.
gone if it disappears mysteriously between its origin and