コンピュータ・プログラミングにおいて、無名関数とは、識別子に束縛されていない関数定義のことです。
無名関数は、高階関数に渡される引数や、関数を返す必要のある高階関数の結果を返すために使われます。
無名関数は、関数型プログラミング言語や第一級関数を持つ他の言語ではどこにでもあり、他のデータ型に対するリテラルと同様に、関数型に対して同じ役割を果たします。
無名関数は、電子計算機が登場する以前の1936年にアロンゾ・チャーチが発明し、すべての関数が無名であるラムダ計算に由来しています。
いくつかのプログラミング言語では、無名関数はキーワードlambdaを用いて導入され、無名関数はしばしば ''lambdas'' または ''lambda abstractions'' と呼ばれます。
無名関数は、1958年のLisp以来、プログラミング言語の特徴となっており、最近のプログラミング言語では無名関数をサポートするものが増えている。
(setq add (lambda (a b) (+ a b)))
(apply add '(2 3)) ; 5
int main() {
	auto add = [](int a, int b){ return a + b; };
	std::cout << add(2, 3) << std::endl; // 5
	return 0;
}
functionキーワード:
const add = function(a, b) {
    return a + b;
}
console.log(add(2, 3)); // 5
アロー関数:
const add = (a, b) => a + b;
console.log(add(2, 3)); // 5
$f = sub {
  my $x = shift;
  my $y = shift;
  return $x * $y;
}
print $f->(2, 3);
lambdaキーワード:
add = lambda{ |a, b| a + b }
puts add[2, 3] # 5
Procクラス:
add = Proc.new{ |a, b| a + b }
puts add[2, 3] # 5
アロー演算子:
add = ->(a, b){a + b}
puts add[2, 3] # 5
add = lambda a, b: a + b
print(add(2, 3)) # 5
add = function(a, b) return a + b end
print(add(2, 3)) -- 5
BiFunction add = (a, b) -> a + b;
System.out.println(add.apply(2, 3)); // 5
匿名メソッド:
Func add = delegate(int a, int b){ return a + b; };
Console.WriteLine(add(2, 3)); // 5
ラムダ式:
Func add = (a, b) => a + b;
Console.WriteLine(add(2, 3)); // 5
クロージャ:
let add = {(a:Int, b:Int) -> Int in a + b}
print(add(2, 3)) // 5
無名関数:
val add = fun(a:Int, b:Int) = a + b
println(add(2, 3)) // 5
ラムダ式:
val add = {a:Int, b:Int -> a + b}
println(add(2, 3)) // 5
f := func(s string) string { return "Hello, " + s + "!" } 
fmt.Println(f("world"))
auto f = (int x, int y){ return x * y; };
const f = struct {
  pub fn func(x:i64, y: i64) i64 {
    return x * y;
  }
}.func;
Zigでは、匿名structの公開メンバーへのポインターを返すと無名関数となり、sort()関数などの引数に使うことができます。