@koakuma procedure arguments in ALGOL 60 (and derivatives) are by default passed as like a thunk that will return the value instead of being evaluated at call point, it’s evaluated whenever it needs the value
for instance this thing
and you can do Sum(i, 1, 100, V[i]) (given a 100-element array V and an integer variable i) and it’ll ask for the value of V[i] after setting i to the loop variable on each iteration