:- module( commandline, [ do_arguments/0 ] ). do_arguments :- current_prolog_flag(argv, Argv), do_arguments(Argv). :- dynamic(file/1). do_arguments(Argv) :- retractall(file(_)), parse_arguments(Argv), load_files. load_files :- \+ ( file(File), \+ ( load(File) ) ). parse_arguments([]). parse_arguments([Arg | Argv]) :- ( Arg = '--' -> add_files(Argv) ; atom_concat('--', _, Arg) -> ( option(_, Arg, Argv, ArgTail) -> parse_arguments(ArgTail) ; throw(error(unknown_option(Arg))) ) ; add_file(Arg), parse_arguments(Argv) ). option('', '--trace', Arg, Arg) :- leash(-all), trace. option('', '--generate-doc', Arg, Arg) :- generate_doc, quit. option('', '--version', Arg, Arg) :- quit. add_files(Files) :- \+ ( member(File, Files), \+ ( add_file(File) ) ). add_file(File) :- assertz(file(File)).