edit :- edit(file([],[])). edit(File) :- read(Command), edit(File,Command). edit(_File,exit) :- !. edit(File,Command) :- apply(Command,File,File1), !, edit(File1). edit(File,Command) :- write(Command), write(' is not applicable'), !, edit(File). apply(up,file([X|Xs],Ys),file(Xs,[X|Ys])). apply(down,file(Xs,[Y|Ys]),file([Y|Xs],Ys)). apply(insert(Line),file(Xs,Ys),file(Xs,[Line|Ys])). apply(delete,file(Xs,[_Y|Ys]),file(Xs,Ys)). apply(print,file([X|Xs],Ys),file([X|Xs],Ys)) :- write(X), nl. apply(print(*),file(Xs,Ys),file(Xs,Ys)) :- reverse(Xs,Xs1), write_file(Xs1), write_file(Ys). write_file([X|Xs]) :- write(X), nl, write_file(Xs). write_file([]). sublist(Xs,Ys) :- append(_,Xs,Zs), append(Zs,_,Ys).