The standard procedure present cannot imitate our human intuition that, if X connects to Y, then Y also connects to X. The procedure spresent, however, can infer such commutative relations. For example, the Tourist Guide could answer a tourist's question, ``What is near Madame Tussaud's,'' by constructing a query to the database of the form
present([?x near [madame tussauds]])
With the database containing the entry
[[the planetarium] near [madame tussauds]]
the call of present would return <true>. But the reverse query, ``What is near the planetarium?'' would produce <false>, unless the entry
[[madame tussauds] near [the planetarium]]
was explicitly put into the database. To save such duplication, we can instead form entries with the keyword connects. Thus, rather than the two entries above, we have the single item
[[the planetarium] connects [madame tussauds]]
You may think that this is a misuse of the word `connects' to mean `near', but the word is only a symbol used in the internal representation of the database. We might just as well have used `cnncts' or `xyzzy', providing that there is an appropriate translation from the internal form to a set of words that the human user (in this case our tourist) will understand.
The call of
present([?x connects [the planetarium]])
will still return <false>, since there is no matching entry, but a call of
spresent([?x connects [the planetarium]])
returns <true>. spresent acts as if the entry were explicitly in the database.