@@ -56,9 +56,10 @@ array = {
5656 utils .raises_error (array , obj , ' slice' )
5757
5858 if array .is_empty (obj ) or start == finish then return {} end
59+ local _finish = finish or (# obj + 1 )
5960
6061 local output = {}
61- for i = (start or 1 ), (finish or # obj ) do
62+ for i = (start or 1 ), (_finish - 1 ) do
6263 table.insert (output , obj [i ])
6364 end
6465
@@ -581,33 +582,28 @@ array = {
581582 -- @param obj {table}
582583 -- @return {table}
583584 permutation = function (obj )
585+ local output = {}
586+
584587 if # obj == 1 then
585588 return { obj }
586589 end
587590
588- local output = {}
589- local partial_list = array .permutation (array .slice (obj , 2 ))
590- local first = { obj [1 ] }
591+ local partial_permutations = array .permutation (array .slice (obj , 2 ))
592+ local first = obj [1 ]
591593
592- for i = 1 , # partial_list do
593- local partial = partial_list [i ]
594+ for i = 1 , # partial_permutations do
595+ local partial = partial_permutations [i ]
594596
595597 for j = 1 , # partial + 1 do
596- local merged = array .concat (
597- array .slice (partial , 1 , j ),
598- first ,
599- array .slice (partial , j )
600- )
598+ local permutation_front = array .slice (partial , 1 , j )
599+ local permutation_after = array .slice (partial , j )
601600
602- table.insert (
603- output ,
604- merged
605- )
601+ table.insert (output , array .concat (permutation_front , { first }, permutation_after ))
606602 end
607603 end
608604
609605 return output
610- end ,
606+ end
611607}
612608
613609return array
0 commit comments