[解決済み] ラムダ(関数)とは何ですか?
2022-03-19 12:17:22
質問
コンプサイエンスのバックグラウンドを持たない人にとって、コンピュータサイエンスの世界でのラムダとは何なのでしょうか?
どのように解くのですか?
ラムダの由来は ラムダ計算 であり、プログラミングにおける無名関数のことである。
なぜこれがクールなのか?名前を付けずに、素早く捨てられる関数を書くことができるからです。また、クロージャを書くのに良い方法を提供してくれます。この力を使えば、こんなこともできるようになります。
パイソン
def adder(x):
return lambda y: x + y
add5 = adder(5)
add5(1)
6
Pythonのスニペットからわかるように、関数adderは引数xを受け取り、別の引数yを受け取る匿名関数(ラムダ)を返します。この匿名関数によって、関数から関数を作成することができます。これは簡単な例ですが、ラムダとクロージャが持つ力を伝えることができるはずです。
他の言語での例
Perl 5
sub adder {
my ($x) = @_;
return sub {
my ($y) = @_;
$x + $y
}
}
my $add5 = adder(5);
print &$add5(1) == 6 ? "ok\n" : "not ok\n";
JavaScript
var adder = function (x) {
return function (y) {
return x + y;
};
};
add5 = adder(5);
add5(1) == 6
JavaScript (ES6)
const adder = x => y => x + y;
add5 = adder(5);
add5(1) == 6
スキーム
(define adder
(lambda (x)
(lambda (y)
(+ x y))))
(define add5
(adder 5))
(add5 1)
6
Func<int, Func<int, int>> adder =
(int x) => (int y) => x + y; // `int` declarations optional
Func<int, int> add5 = adder(5);
var add6 = adder(6); // Using implicit typing
Debug.Assert(add5(1) == 6);
Debug.Assert(add6(-1) == 5);
// Closure example
int yEnclosed = 1;
Func<int, int> addWithClosure =
(x) => x + yEnclosed;
Debug.Assert(addWithClosure(2) == 3);
スウィフト
func adder(x: Int) -> (Int) -> Int{
return { y in x + y }
}
let add5 = adder(5)
add5(1)
6
PHP
$a = 1;
$b = 2;
$lambda = fn () => $a + $b;
echo $lambda();
ハスケル
(\x y -> x + y)
ジャワ 見る この記事
// The following is an example of Predicate :
// a functional interface that takes an argument
// and returns a boolean primitive type.
Predicate<Integer> pred = x -> x % 2 == 0; // Tests if the parameter is even.
boolean result = pred.test(4); // true
ルア
adder = function(x)
return function(y)
return x + y
end
end
add5 = adder(5)
add5(1) == 6 -- true
コトリン
val pred = { x: Int -> x % 2 == 0 }
val result = pred(4) // true
ルビー
Rubyは、関数の呼び出しとまったく同じ構文でラムダを呼び出せないという点で少し異なりますが、それでもラムダは存在します。
def adder(x)
lambda { |y| x + y }
end
add5 = adder(5)
add5[1] == 6
Rubyにはラムダという省略記法があり、それを使って
adder
このように
def adder(x)
-> y { x + y }
end
R
adder <- function(x) {
function(y) x + y
}
add5 <- adder(5)
add5(1)
#> [1] 6
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン