高階関数とクロージャ

ってのは相性が良い、というか関係がある。今月号のC Magazineの結城さんの連載に載っていた。(http://www.hyuki.com/al/

いわれてみるとそんな気もするが、まだ実感がない。「そういえばそうかも」という感じか。*1

#!/usr/bin/perl -w
# test009.pl
# created:2005-02-26 18:08:58+09:00
#
# 高階関数クロージャ

use strict;

# highter_functionはサブルーチン(関数)を返す。
sub highter_function {
	my ($num) = @_;
	return sub { my ($mul) = @_; $num *= $mul; } # $numはクロージャ
}

my $set_mul = &highter_function(5);	# かける数を5に設定

# サブルーチンのリファレンス
print '$set_mul                      : ', $set_mul;	# => $set_mul:CODE(0x274f40)

print "\n";

# 3*5を計算
print '$set_mul->(3)                 : ', $set_mul->(3); # => $set_mul->(3):15

print "\n";

# 別の記法
# $\&highter_function(5)->(3)
# {\&highter_function(5)}->(3)
# はダメだった

print '${\&highter_function(5)}->(3) : ', ${\&highter_function(5)}->(3); # => 15

# test009.pl ends here.

結果はこんな感じになった。

$set_mul                      : CODE(0x274f40)
$set_mul->(3)                 : 15
${\&highter_function(5)}->(3) : 15

*1:あんまり理解ができていないような気がかなりする。