Кажется, что в настоящее время несколько основных языков поддерживают литералы функций. Их также называют анонимными функциями, но мне все равно, есть ли у них имя. Важно то, что литерал функции является выражением, которое дает функцию, которая еще не определена в другом месте, поэтому, например, в 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
является локальной для выражения, поэтому все выражение на самом деле является анонимной функцией.
Есть ли другие?