- 論壇徽章:
- 1
|
原帖由 netawater 于 2007-1-22 11:31 發(fā)表
初學Perl,沒研究過closure。在Scheme中l(wèi)ambda是可以返回一個完整的函數(shù)的。
closure中shift指令是否表示將參數(shù)偏移?
下面這個程序如果用閉報應該如何是實現(xiàn)?
[quote]int main(void)
{
PAIR pair = cons(1,2);
cout<<"car:"<<car(pair)<<"\n";
cout<<"cdr:"<<cdr(pair)<<"\n";
return 1;
} [/quote]
像這種帶參數(shù)的需求,實在沒必要用閉包,用普通的函數(shù)就可以了。
- sub cons($$) {
- my ($x, $y) = @_;
- return [$x, $y];
- }
- sub car {
- my $pair = shift;
- return $pair->[0];
- }
- sub cdr {
- my $pair = shift;
- return $pair->[1];
- }
- # main:
- my $pair = cons(1,2);
- print car($pair), "\n";
- print cdr($pair), "\n";
復制代碼
如果只是為了展示閉包的用法而一定要用閉包,那么可以這么寫:
- sub cons($$) {
- my ($x, $y) = @_;
- return (sub {return $x}, sub {return $y});
- }
- # main:
- my ($car, $cdr) = cons(1,2);
- print $car->(), "\n";
- print $cdr->(), "\n";
復制代碼 |
|