SWISH cannot provide unrestricted access to Prolog because Prolog gives unrestricted access to the operating system. Therefore, SWISH examines each goal on safety before execution. This process unfolds the call-tree and verifies all called predicates against a whitelist. It fails on three occasions:
?- read(X), call(X).
Such errors are raised as instantiation errors.
If any of the above happens, the error is printed, along with a chain of intermediate goals that should help finding the culprit. Note that the whitelist is incomplete, i.e., there are many predicates that can be considered safe that are not on the list. Please report such omissions as bugs.
Normal read and write do not work in the web environment. A number of normal Prolog predicates are redefined to provide basic I/O. Other I/O predicate are either not whitelisted or send their output to the server's console.