[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
disjointness of '() and #f
This is a frequent source of confusion in data structures where 2 pieces
of information is desired: (1) was an action successful? (2) if
successful, what was the value of the result? [multiple value returns is
another discussion]. As (2) is only interesting in the success case, the
attempt is made to overload the returned value for two uses. E.g.
(let ( (probe (table-lookup table key)) )
(if probe
(success-action probe)
(failure-action)
) )
This works as long as the value of PROBE is #f XOR a valid data value.
What happens when key is in the table, and its associated value is #f?
You don't remove the problem by mandating (eq? #f '()) to be #f, you
have just hidden one instance of it. The real problem is #f, not '().