As in all stack languages, the arguments are put on
the stack before a function is executed.
In case of a user-defined function, the return address is additionally put on the stack; local variables (e.g. created by let) follow:
After executing the function, all arguments, the return address, and local variables are removed from the stack, the return value is put on the stack, and the program counter is set to the return address: