For someone used to imperative programming, it's sometimes hard to write efficient code in functional languages without using arrays/vectors. However, it seems there's always a smart way of doing it. Sorting, for example, can be done in O(n*log(n)) time both in imperative and declarative programming languages, and the absence of swapping operations is not a real problem.
Consider a functional programming language that has no arrays or any data structure that can access an arbitrary element in constant time. Take a subset of SML or Haskell without arrays, for example.
Of course, every computable problem is solvable by a program written in such language. But I'm wondering if there is any problem that intrinsically can't be solved efficiently outside the imperative world. By "efficiently", I mean with at most the same time complexity of the best known imperative algorithm to solve the problem.
For example, can matrix multiplication be computed efficiently using only lists in SML or Haskell?