ruby-changes:62527
From: Burdette <ko1@a...>
Date: Wed, 5 Aug 2020 23:43:19 +0900 (JST)
Subject: [ruby-changes:62527] 2498334614 (master): Enhanced documentation for Array#repeated_permutation (#3390)
https://git.ruby-lang.org/ruby.git/commit/?id=2498334614 From 249833461444ef79b625fb27bf30d366fdc9b8dd Mon Sep 17 00:00:00 2001 From: Burdette Lamar <BurdetteLamar@Y...> Date: Wed, 5 Aug 2020 09:42:58 -0500 Subject: Enhanced documentation for Array#repeated_permutation (#3390) * Enhanced documentation for Array#repeated_permutation * Enhanced documentation for Array#repeated_permutation diff --git a/array.c b/array.c index 87e7fb3..f635ce7 100644 --- a/array.c +++ b/array.c @@ -7810,25 +7810,74 @@ rb_ary_repeated_permutation_size(VALUE ary, VALUE args, VALUE eobj) https://github.com/ruby/ruby/blob/trunk/array.c#L7810 /* * call-seq: - * ary.repeated_permutation(n) {|p| block} -> ary - * ary.repeated_permutation(n) -> Enumerator + * array.repeated_permutation(n) {|permutation| ... } -> self + * array.repeated_permutation(n) -> new_enumerator * - * When invoked with a block, yield all repeated permutations of length +n+ of - * the elements of the array, then return the array itself. + * Calls the block with each repeated permutation of length +n+ of the elements of +self+; + * each permutation is an \Array; + * returns +self+. The order of the permutations is indeterminate. * - * The implementation makes no guarantees about the order in which the repeated - * permutations are yielded. + * Argument +n+ must be an + * {Integer-convertible object}[doc/implicit_conversion_rdoc.html#label-Integer-Convertible+Objects]. * - * If no block is given, an Enumerator is returned instead. + * --- * - * Examples: + * When a block and a positive argument +n+ are given, calls the block with each + * +n+-tuple repeated permutation of the elements of +self+. + * The number of permutations is <tt>self.size**n</tt>. + * + * +n+ = 1: + * a = [0, 1, 2] + * a1 = a.repeated_permutation(1) {|permutation| p permutation } + * a1.equal?(a) # => true # Returned self + * Output: + * [0] + * [1] + * [2] + * + * +n+ = 2: + * a.repeated_permutation(2) {|permutation| p permutation } + * Output: + * [0, 0] + * [0, 1] + * [0, 2] + * [1, 0] + * [1, 1] + * [1, 2] + * [2, 0] + * [2, 1] + * [2, 2] + * + * If +n+ is zero, calls the block once with an empty \Array: + * a.repeated_permutation(0) {|permutation| p permutation } + * Output: + * [] + * If +n+ is negative, does not call the block: + * a.repeated_permutation(-1) {|permutation| fail 'Cannot happen' } + * + * --- * - * a = [1, 2] - * a.repeated_permutation(1).to_a #=> [[1], [2]] - * a.repeated_permutation(2).to_a #=> [[1,1],[1,2],[2,1],[2,2]] - * a.repeated_permutation(3).to_a #=> [[1,1,1],[1,1,2],[1,2,1],[1,2,2], - * # [2,1,1],[2,1,2],[2,2,1],[2,2,2]] - * a.repeated_permutation(0).to_a #=> [[]] # one permutation of length 0 + * Returns a new \Enumerator if no block given: + * a = [0, 1, 2] + * a.repeated_permutations(2) # => #<Enumerator: [0, 1, 2]:permutation(2)> + * + * Using Enumerators, it's convenient to show the permutations and counts + * for some values of +n+: + * e = a.repeated_permutation(0) + * e.size # => 1 + * e.to_a # => [[]] + * e = a.repeated_permutation(1) + * e.size # => 3 + * e.to_a # => [[0], [1], [2]] + * e = a.repeated_permutation(2) + * e.size # => 9 + * e.to_a # => [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]] + * + * --- + * + * Raises an exception if +n+ is not an Integer-convertible object: + * # Raises TypeError (no implicit conversion of Symbol into Integer): + * a.repeated_permutation(:foo) { } */ static VALUE -- cgit v0.10.2 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/