APL would be considered a functional language today. Its array processing facilities are famous for speed, flexibility, power, and generality. For example, almost any array transform can be performed by a chain of functions on arrays of arbitrary dimension (subject to mathematical constraints - I.e. Iirc cross product is only valid in 2d? I forget.
APL was originally designed as a notation to describe the operations of computers for design purposes. It is one of those languages that teach the programmer new ways of thinking. In this case it changes programming from concerns of off by one errors to a process of transforms over arrays. I.e C <= A * B makes sense for any conforming A, B, and result C from scalar to A having five dimensions. You will not find a more rigorous, complete implementation of array mathematical programming.
Part of APLs performance comes from its high level knowledge of the problem, allowing it to shortcut and optimize based on the actual high level problem rather than trying to guess a programmer's intent; then implementing directly close to the metal. The interpreter really doesn't do much of the work.