Modules have been debated fiercely in the Prolog world. Despite all counter-arguments we feel they are extremely useful because:
Using modules is generally easy. Only if you write meta-predicates
(predicates reasoning about other predicates) that are exported from a
module is a good understanding required of the resolution of terms to
predicates inside a module. Here is a typical example from
:- module(read_util, [ read_line_to_codes/2, % +Fd, -Codes read_line_to_codes/3, % +Fd, -Codes, ?Tail read_stream_to_codes/2, % +Fd, -Codes read_stream_to_codes/3, % +Fd, -Codes, ?Tail read_file_to_codes/3, % +File, -Codes, +Options read_file_to_terms/3 % +File, -Terms, +Options ]).