nilは空リストです。
リストの要素である入力ファイル名が関数の再帰呼び出しで一個ずつ減りますよね?
で、入力ファイルが無くなったら何もせずに終了、と。

前者っていうのはnilが来たときの動作ってことでしょうか?
リストの要素が無くなって空リストが来たら終了させたいんですが。。。

後者ってのは二行目以降ですよね?
InAbcOut n outfで、リストの先頭の要素に処理を施してoutfに出力した後、
abc L outfで関数abcを再帰呼び出しして、リストの次の要素に同様の処理を
再帰的に施していきたいんですが。。。