You can use SlotSequence and ConstantArray (or Table):

fun[x_List, n_Integer] := Flatten[Outer[List, ##] & @@ ConstantArray[x, n], 2]

fun[{a, b}, 3] == Tuples[{a, b}, 3]
(* True *)
Answer from rm -rf on Stack Exchange
🌐
Wolfram Language
reference.wolfram.com › language › ref › Sequence.html
Sequence - Wolfram Language Documentation
Wolfram Language code: f[{{a, b}, {c, d}, {a}}] /. List -> Sequence · Conditionally add an element to a list by using Apply to delay the Sequence until evaluation:
🌐
Webel IT Australia
webel.com.au › node › 3498
Mathematica: HOWTO Convert a list into a Sequence of arguments to a function (where each of the arguments to the function corresponds to a list item) | Webel IT Australia
There are many easy solutions, perhaps the easiest is the infix @@ version of Apply: f[a_,b_,c_,d_] := .. list = {fe,fi,fo,fum}; f @@ list It's also possible to splice sequences in. list2 = {e,f} g[a, b, c, d, Sequence @@ list2]
🌐
Wolfram Language
reference.wolfram.com › language › guide › ListManipulation.html
List Manipulation - Wolfram Language Documentation
Lists are central constructs in the Wolfram Language, used to represent collections, arrays, sets, and sequences of all kinds. Lists can have any structure and size and can routinely involve even millions of elements. Well over a thousand built-in functions throughout the Wolfram Language operate ...
🌐
Wolfram Language
reference.wolfram.com › language › ref › List.html
List - Wolfram Language Documentation
A list can be converted to a sequence of expressions by applying Sequence to it.
🌐
Wolfram Language
reference.wolfram.com › language › ref › SequenceCases.html
SequenceCases - Wolfram Language Documentation
SequenceCases[list, patt] gives a list of the sublists in list that match the sequence pattern patt. SequenceCases[list, patt -> rhs] gives a list of the values of rhs corresponding to sublists that match patt.
🌐
Purdue University
cs.purdue.edu › homes › ayg › CS590C › www › mathematica › math07.html
Generating and manipulating lists of numbers
Suppose, for example, that we want to make a list of the squares of the numbers from 1 to 10. This command will generate such a list: Table[ n^2, {n, 1, 10} ] { 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 } ... Table[ &LTexpression&GT, &LTiterator&GT ] where &LTiterator&GT tells Mathematica what sequence of numbers to use in generating the list from &LTexpression&GT.
Find elsewhere
🌐
Wolfram Language
reference.wolfram.com › language › ref › SequencePosition.html
SequencePosition—Wolfram Documentation
SequencePosition[list, sublist] gives a list of the starting and ending positions at which sublist appears in list. SequencePosition[list, patt] gives all positions at which sequences matching patt occur in list.
🌐
Wolfram Language
reference.wolfram.com › language › ref › FindSequenceFunction.html
FindSequenceFunction - Wolfram Language Documentation
FindSequenceFunction[{a1, a2, a3, ...}] attempts to find a simple function that yields the sequence an when given successive integer arguments. FindSequenceFunction[{{n1, a1}, {n2, a2}, ...}] attempts to find a simple function that yields ai ...
🌐
Wolfram Language
reference.wolfram.com › language › ref › SequenceReplace.html
SequenceReplace - Wolfram Language Documentation
SequenceReplace[list, rules] replaces sequences in list according to the specified rule or list of rules. SequenceReplace[list, rules, n] does only the first n replacements. SequenceReplace[rules] represents an operator form of SequenceReplace ...
🌐
Wolfram Language
reference.wolfram.com › language › ref › SequenceCount.html
SequenceCount - Wolfram Language Documentation
In SequenceCount[list,patt], patt can be an expression with head List that includes pattern constructs such as PatternSequence, Repeated (..), Blank (_), and BlankSequence (__).
🌐
Wolfram
wolfram.com › language › fast-introduction-for-math-students › en › sequences-sums-and-series
Sequences, Sums, Series | Mathematica & Wolfram Language for Math Students—Fast Intro
How to build integer sequences and recursive sequences with lists. Calculate totals, sums, power series approximations. Tutorial for Mathematica & Wolfram Language.
🌐
Wolfram Language
reference.wolfram.com › language › ref › TakeList.html
TakeList - Wolfram Language Documentation
TakeList[list, {n1, n2, ...}] gives the list of results obtained by successively taking ni elements from list. TakeList[list, {seq1, seq2, ...}] successively uses the sequence specifications seqi.
🌐
Wolfram Language
reference.wolfram.com › language › guide › RearrangingAndRestructuringLists.html
Rearranging & Restructuring Lists—Wolfram Documentation
The Wolfram Language encapsulates in a small number of functions vast flexibility in rearranging lists with any structure and any number of elements. Flatten — flatten out any sequence of levels in a nested list