异常后清理

谓词 setup_call_cleanup/3,当前正被考虑包含在 Prolog ISO 标准中并由越来越多的实现提供,这使我们可以确保在抛出异常后正确释放资源。

典型的调用是:

setup_call_cleanup(open(File, Mode, Stream), process_file(File), close(Stream))

请注意,在这种情况下调用 open/3 后,甚至可能会立即发生异常或中断。因此,Setup 阶段是原子地进行的。在只提供 call_cleanup/2 的 Prolog 系统中,这很难表达。