private Expression cons( List<Expression> args, String caller ) {
      
      if ( args.size() != 2 ) {
         System.err.println("cons expected exactly two argument and got " + args.size() );
         return new Void();
      }
      
      Expression evaledArg = args.get(0).eval(defSubst, caller);
      Expression list = args.get(1).eval(defSubst, caller);
      
      if ( list.getType().compareTo("quotelist") != 0 ) {
         System.err.println("cons expected a quotelist as the second argument and got a " + list.getType() );
         return new Void();
      }
      
      QuoteList ourList = (QuoteList) list;
      
      // the elements of the list
      List<Expression> elements = ourList.getElements();
      
      
      // if the list is empty -> error
      // otherwise -> return all but the first element of the list
      elements.add(0, evaledArg );
      QuoteList newList = new QuoteList(elements);
      return newList.eval(defSubst, caller);
         
   }