In my undergrad at UNSW I did a "baby's first interpreter" project on a language with a similar concept - function evaluation is defined in terms of unbounded-length arrays, being able to cache function evaluation for performance etc.
Looking back it was pretty cool and helped form a more abstracted view of programming beyond the low-level