copy(File1, File2) :- %seeing(Old1), /* save for later */ %telling(Old2), /* save for later */ see(File1), /* open this file */ tell(File2), repeat, get_char(Data), /* read from File */ process(Data), seen, /* close File */ told, % see(Old1), /* previous read source */ % tell(Old2), /* previous write source */ !. /* stop now */ process(end_of_file) :- !. process(Data) :- put_char(Data), fail.