Perl6 あなどれじ。クロージャ記述の短さ対決!


id:m-hiyama さん経由で、404 Blog Not Found の「水と油、returnとλ」によると…、

しかし、Perl6はこんなもんじゃありませんよ!

Perl6:
sub($x){ $x + 1 } # 基本形
-> $x { $x + 1 } # -> を使うと()が不要になる
sub{ $^x + 1 } # placeholder を使うと...
{ $^x + 1 } # なんと sub までいらない!

とのこと。


以前、ポール・グレアムが「技術野郎の復讐---Revenge of the Nerds---」の付録でアキュムレータの記述の簡潔さを競わせていたとき、Smalltalk の例を見て、こんなのメソッドで定義せずに、ブロックだけでいいじゃん…。しかも、SqueakSmalltalk ならブロック変数(グラハム言うところのパラメータ)にも代入できるから、「lambda」をいちいち書かなきゃいかん Common Lisp も凌駕するシンプルさだぜ!

foo := [:n | [:i | n := n + i]]


…と、ひとしきり息巻いてみたあと、ふと、周りを見渡してみて、Smalltalk ほど、クロージャを簡潔に記述できる言語はないんじゃないか?と気づいてひとり悦に入っていてわけです。


が、いましたよ強敵が。 その名は Perl6 ! ちなみに、くだんの式を Smalltalk で書くと…、

[:x | x + 1]


短い! シンプル! ブラボー! し…しかし、Perl6 の placeholder を用いた表記にはかないません…。こんな短い処理の例でも、ブロック変数の文字数分、つねに負けることになる…。いわんや、複雑な処理をや。orz