public static <A> Program<A> of(
		final String name,
		final int depth,
		final ISeq<? extends Op<A>> operations,
		final ISeq<? extends Op<A>> terminals,
		final RandomGenerator random
	) {
		return new Program<>(name, of(depth, operations, terminals, random));
	}
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 random the random engine used for creating the program
@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
jenetics.prog/src/main/java/io/jenetics/prog/op/Program.java