Modules normally are created by loading a module file. A module file is a file holding a module/2 directive as its first term. The module/2 directive declares the name and the public (i.e., externally visible) predicates of the module. The rest of the file is loaded into the module. Below is an example of a module file, defining reverse/2.
:- module(reverse, [reverse/2]). reverse(List1, List2) :- rev(List1, , List2). rev(, List, List). rev([Head|List1], List2, List3) :- rev(List1, [Head|List2], List3).