code: public <T extends Object> void forEach(final ITreeAppendable appendable, final Iterable<T> elements, final Procedure1<? super LoopParams> loopInitializer, final Procedure1<? super T> procedure) {
      boolean _isEmpty = IterableExtensions.isEmpty(elements);
      if (_isEmpty) {
        return;
      }
      LoopParams _loopParams = new LoopParams();
      final LoopParams params = ObjectExtensions.<LoopParams>operator_doubleArrow(_loopParams, loopInitializer);
      params.appendPrefix(appendable);
      T _head = IterableExtensions.<T>head(elements);
      ObjectExtensions.<T>operator_doubleArrow(_head, procedure);
      final Consumer<T> _function = (T it) -> {
        params.appendSeparator(appendable);
        ObjectExtensions.<T>operator_doubleArrow(it, procedure);
      };
      IterableExtensions.<T>tail(elements).forEach(_function);
      params.appendSuffix(appendable);
    }
docs: Iterates elements and execute the procedure.
  A prefix, a separator and a suffix can be initialized with the loopInitializer lambda.