# Using the same parameter n times in a function call

Hello!
I am struggling to find a way to “automate” this type of function call:

``````using LinearAlgebra
x = [rand() rand(); rand() rand()]
kron(x, x) #n=2
kron(x, x, x) #n=3
kron(x, x, x, x) #n=4
``````

Basically, having a 2x2 matrix “x” I would like to use the kronecker product of x with itself n times.
Is there a way to achieve this, perhaps in a manner like:

`kron(repeat(x, n))`

Of course not with the repeat function, but perhaps with something else.

``````kron(fill(x, 3)...)
``````
2 Likes

Thank you! “…” looks like an interesting and useful operator… haven’t encountered (or used) in other programming languages.

1 Like

Hey @Zackyzz , glad you got your question answered! Also, welcome to the Julia Community – saw it was your first post here on Discourse! Hope you enjoy your time here!

Yea, this syntax is interesting – it is called splatting and you can learn more about it here: Essentials · The Julia Language… (I am a fan of it but sometimes, it is not as efficient as maps or otherwise).

3 Likes

I am a big fan of “splat” and “slurp” as Julia’s most comical terminology.

2 Likes

In the case of `kron` and other associative operations, you can also do `reduce(kron, fill(x, n))`. That’s useful to know for many other associative functions like `hcat`, `union` etc.

3 Likes

The reduce trick is useful when `n` is large or not known at compile time to avoid the performance issues of splatting and slurping (`...`).

``````kronn(x,n)=n==2 ? kron(x,x) : kron(x, kronn(x,n-1))
``````
``````kronn(x,n)= n==1 ? x : kron(x, kronn(x,n-1))
``````

this is correct the above are incorrect (kron is not commutative)

``````kronn(x,n)= n==1 ? x : kron(kronn(x,n-1),x)
``````
1 Like