- 论坛徽章:
- 1
|
原帖由 netawater 于 2007-1-22 11:31 发表
初学Perl,没研究过closure。在Scheme中lambda是可以返回一个完整的函数的。
closure中shift指令是否表示将参数偏移?
下面这个程序如果用闭报应该如何是实现?
[quote]int main(void)
{
PAIR pair = cons(1,2);
cout<<"car:"<<car(pair)<<"\n";
cout<<"cdr:"<<cdr(pair)<<"\n";
return 1;
} [/quote]
像这种带参数的需求,实在没必要用闭包,用普通的函数就可以了。
- 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";
复制代码 |
|