Кажется, что в настоящее время несколько основных языков поддерживают литералы функций. Их также называют анонимными функциями, но мне все равно, есть ли у них имя. Важно то, что литерал функции является выражением, которое дает функцию, которая еще не определена в другом месте, поэтому, например, в C, &printf не учитывается.
EDIT, чтобы добавить: если у вас есть истинное выражение функции <exp>, вы должны передать его функции f(<exp>) или сразу применить ее к аргументу, т.е. <exp>(5).
Мне любопытно, какие языки позволяют писать литералы функций, которые являются рекурсивными. Wikipedia " анонимная рекурсия" статья не дает никаких примеров программирования.
В качестве примера можно использовать рекурсивную факториальную функцию.
Вот те, которые я знаю:
-
JavaScript/ECMAScript может сделать это с помощью
callee:function(n){if (n<2) {return 1;} else {return n * arguments.callee(n-1);}} -
легко в языках с
letrec, например Haskell (который вызывает егоlet):let fac x = if x<2 then 1 else fac (x-1) * x in facи существуют эквиваленты в Lisp и схеме. Обратите внимание, что привязка
facявляется локальной для выражения, поэтому все выражение на самом деле является анонимной функцией.
Есть ли другие?