- 65 名前:デフォルトの名無しさん mailto:sage [2013/07/27(土) 22:03:13.88 ]
- >>55
前スレ869ですが元となったコードを完全に乗せると以下の様な物になります。 DSLのメソッドチェーンをreduceで処理しようとしていました。 具体的に言うとfn(a)(b)(c)というシンタックスを(fn, a, b, c)に正規化し fnをaに適用しその返り値をbに適用しその返り値をcに適用するという処理です。 これはまさにreduceの出番だと合点したものでしたが 猫を電子レンジで乾かすようなものだったのですね。 return reduce { my ($func, $argv) = ($a, $b); my @evaled_argv = eval_argv($argv); my $env = []; # reduceの中はスコープがきられない my $lexical_table = {}; my $arg_set; my $closure = my_eval($func); my $func_body = str_to_show($closure->[1]); @{$env} = (@{$closure->[2]}, $lexical_table); push @envs, $env; my $i=0; for (@evaled_argv) { $envs[-1][-1]{"_ARG$i"} = $_; $i++; } my $result = my_eval($func_body, "text"); pop @envs; $result } @normalized;
|

|