public static <A> TreeNode<Op<A>> of(
		final int depth,
		final ISeq<? extends Op<A>> operations,
		final ISeq<? extends Op<A>> terminals
	) {
		return of(depth, operations, terminals, RandomRegistry.random());
	}
Create a new, random program tree from the given (non) terminal
operations with the desired depth. The created program tree is a
<em>full</em> tree.

@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 tree
@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