code: public static <A> Program<A> of(
  		final String name,
  		final int depth,
  		final ISeq<? extends Op<A>> operations,
  		final ISeq<? extends Op<A>> terminals
  	) {
  		return new Program<>(name, of(depth, operations, terminals));
  	}
docs: Create a new, random program from the given (non) terminal operations
  with the desired depth. The created program tree is a <em>full</em> tree.
  
  @since 4.1
  
  @param name the program name
  @param depth the desired depth of the program tree
  @param operations the list of <em>non</em>-terminal operations
  @param terminals the list of terminal operations
  @param <A> the operational type
  @return a new program
  @throws NullPointerException if one of the given operations is
  {@code null}
  @throws IllegalArgumentException if the given tree depth is smaller than
  zero