トップページ⇒tech
10コメント3KB

lambdaって何ですか?

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
Schemeやらにはlambdaって関数(?)がありますよね。
これって何ですか?
どう見ても無名関数とかそういう物にした見えないんですが、、
$f = sub { print "hello@` lambda!\n"; }; # Perlの無名関数
"lambda"ってキーワードに惑わされてるのかも。

0002デフォルトの名無しさんNGNG
引数がつけられる。
call/ccとペア
0003SAGENGNG
Schemeって触ったことないので外してるかも知れないけど、
プログラム言語でラムダっていったら、↓これ関係?

http://members.tripod.co.jp/nbz/ref/lambda.html
0004いつでもどこでも名無しさんNGNG
>>3 Schemeは Lispの亜種なのでそのとおり。
無名関数にしかすぎないっていえばそれもそのとおり。
歴史的経緯なのです。carと cdrのような。
0005デフォルトの名無しさんNGNG
car と cdr よりは由緒ある名前だと思うけど…
「環境」も一緒に入ってるってところが、ただの無名関数と違う。
00061NGNG
なるほどー。

>>5
もしかしてそれはclosure(クロージャ)ってやつですか?
またまたPerlですけど、、、

sub make_closure
{
my $message = shift; # 引数を得る

# make_closureの変数をcloseしている??
return sub { print "hello@` $message\n"; };
}

$c1 = &make_closure( "closure" );
$c2 = &make_closure( "クロージャ" );

&$c1();
&$c2();
0007デフォルトの名無しさんNGNG
Lispを学ぶ人にはlambdaより@`make-procedureのようなもっと明白な名前で
あったら@`ずっとわかりやすく@`脅迫感も少なかったろう.しかしこの習慣は
強固に防御されている.この記法は数理論学者Alonzo Church(1941)の数学
形式論@`λ算法から取り込まれた.Churchは関数と関数作用の概念を研究する
ための厳密な基盤としてλ計算を考え出した.λ計算はプログラム言語の意味論
を数学的に研究する基本的道具になっている.
0008デフォルトの名無しさんNGNG
↑ってSICPに書いてあった.
0009デフォルトの名無しさんNGNG
Rubyにも手続きオブジェクトを作るlambda関数がありますね。

f = lambda { print "hello" }
f.call

って感じで。
0010デフォルトの名無しさんNGNG
sage
■ このスレッドは過去ログ倉庫に格納されています