public final SubLObject mapcar(
     final SubLFunction functionTyped,
     final SubLObject[] moreLists,
     final boolean returnConsedResults) {
   if (this == SubLNil.NIL) {
     return SubLNil.NIL;
   }
   for (int i = 0, size = moreLists.length; i < size; i++) {
     if (moreLists[i] == SubLNil.NIL) {
       return SubLNil.NIL;
     }
   }
   final int mapArity = 1 + moreLists.length;
   if (mapArity == 1) {
     UnaryFunction func = UnaryFunction.makeInstance(functionTyped);
     return mapResult(func, returnConsedResults);
   } else if (mapArity == 2) {
     BinaryFunction func = BinaryFunction.makeInstance(functionTyped);
     SubLList listTyped2 = moreLists[0].toList();
     return mapResult(func, listTyped2, returnConsedResults);
   } else {
     return mapResult(functionTyped, moreLists, returnConsedResults);
   }
 }