ALGOL был разработан для математических алгоритмов. Мне нравится функция суммирования в качестве примера вызова по имени.
Извините, мой Алгол немного заржавел, синтаксис, вероятно, неправильный.
.FUNCTION SUM(var,from,to,function)
.BEGIN
.REAL sum =0;
.FOR var = from .TO to .DO sum = function;
return sum;
.END
Вы могли бы использовать сумму как
Y = sum(x,1,4,sum(y,3,8,x+y));
В приведенном выше примере внутренняя сумма (y, 3,8, x + y) будет генерировать безымянную функцию для передачи на вызов внешней суммы. Переменные x и y передаются не по значению, а по имени. В случае переменных вызов по имени эквивалентен вызову по ссылке на адрес в Си. При использовании рекурсии это немного сбивает с толку.
Занимается изготовлением машин ALGOL. У них была 48-битная память слов с 3 флагами. Биты флага реализовали вызов по имени ALGOL. это была машина стека, поэтому, когда функция загружалась в стек, вызов по имени fag вызывал ее вызов. Компилятор генерирует безымянные функции, когда выражения используются в качестве аргументов. Переменная будет простой косвенной ссылкой. Произошла ошибка при записи в функцию.