[Pts 2]   
Consider the following alternative programs to compute the reverse of a list:
   P1: rev([],[]).       
       rev([X|L],M) :- rev(L,K), append(K,[X],M).
          /* append is the builtin for lists concatenation */
and           
   P2: rev(L,M) :- aux(L,M,[]).
       aux([],Acc,Acc).       
       aux([X|L],M,Acc) :- aux(L,M,[X|Acc]).
In what sense is the second program preferable to the fist? (only one answer, please)
- The second program is more flexible: it can be used "in reverse mode"
- The second program is more efficient: it is linear instead of quadratic
 
 - The second program is more modular: it can be used in combination with difference lists
 - The second program is more expressive: it can be used to compute the reverse of any kind of data structure