# Can't call `sort_exercise()`

I am trying to call both functions, starting with `sort_exercise`

``````# reference https://www.geeksforgeeks.org/merge-sort/

# Merges two subarrays of A[]
# First subarray is A[p..m]
# Second subarray is A[m+1..r]

julia> function sort_exercise(A::Vector{Int}, p, m, r)
n1 = m - p + 1
n2 = r - m

# create temp arrays
L = zeros(Int, n1)
R = zeros(Int, n2)

# copy data to temp arrays L[] and R[]
for i = 1:n1
L[i] = A[p + i]
end
for j = 1:n2
R[j] = A[m + 1 + j]
end

# Merge temp arrays back to A[1..r]
i = 0     # Initial index of first subarray
j = 0     # Initial index of second subarray
k = p     # Initial index of merged subarray

while i < n1; j < n2
if L[i] <= R[j]
A[k] = L[i]
i += 1
else
A[k] = R[j]
j += 1
end
k += 1
end

# Copy any possible remaining elements of L[]
while i < n1
A[k] = L[i]
i += 1
k += 1
end

# Copy any possible remaining elements of R[]
while j < n2
A[k] = R[j]
j += 1
k += 1
end
end
sort_exercise (generic function with 1 method)

julia> sort_exercise([4, 5, 22, 1, 3], 1, 3, 5)
ERROR: BoundsError: attempt to access 5-element Array{Int64,1} at index [6]
Stacktrace:
[1] sort_exercise(::Array{Int64,1}, ::Int64, ::Int64, ::Int64) at ./REPL[1]:14

julia> function merge_exercise(A::Vector{Int}, p, r)
if p < r
# equivalent to `(p + r) / 2` w/o overflow for big p and
h (no idea what h is)
m = (p+(r - 1)) / 2

# merge first half
merge_exercise(A, p, m)
# with second half
merge_exercise(A, m + 1, r)

# sort merged halves
sort_exercise(A, p, m, r)
end
end
merge_exercise (generic function with 1 method)
``````

It seems that you have translated the Python code. In fact, in python `L = [0] * (n1)` creates an array of size `n1` filled with 0. In Julia you can use `L = zeros(Int, n1)` to accomplish the same. `L = zeros(Int, 1) * n1` is just the array `[0]` therefore you have the out-of-bound error.
Note that `for i in range(1,n1)` can also be written as `for i = 1:n1`.