2011-06-22 9 views
6

私は愚か/かわいい/鮮やかなを見ていた"sleep sort" that seems to have originated over at 4chan。 intの配列をソートするために、アイデアはスレッド(n)はPerl6オペレータの質問

 
    sleep n 
    print n 

ので、より小さい値が以前の印刷取得ない略

  
    foreach elt in @array 
     spawn thread(elt) 

あります。

Perl6の実装では、私は>>「ハイパー」演算子、これはhyperingが自動的に並列化されることを前提とすることを得る

 
@foo = @foo>>.&sleep; 

あります。しかし、.&は私を混乱させます。

誰でもこれを説明できますか?

おかげ

答えて

8

あなたが機能​​を持っている場合は、あなたがアンパサンド、&yourfuncとそれへの参照をつかむことができます。 $obj.$functionという構文は、$functionを呼び出し、1つの引数、$objを呼び出します。ですから、$function($obj)と書くこともできますが、この構文でハイパーを使用することはできません。

しかし、誰がこの「実装」を思い付いた3つのアカウントに間違っていた:ハイパーオペレータは、コンパイラは各メソッドを実行するためのスレッドの数を起動することができます

  • 、それが出現する必要はありません。これらのすべてのスレッドを一度に処理することはできません。したがって、「ランダムソート」は機能しません。
  • ハイパー演算子はメソッドの実行順序をランダム化することがありますが、順序や返されたアイテムを保持する必要があります。@fooは最初のポイントが適用されなかったとしても、すべてソートされます。
  • sleep()は、引数ではなくスリープした秒数を返します。誰かが計算中にコンピュータをスリープ状態にすると、その結果がはるかに多くなる可能性があります。
+0

回答ありがとう、moritz。 2つのフォローアップ:まず、参照を取得するために&が必要です(Cでは関数の名前は常に&なしでも参照/ポインタを返します)。そして、私は思った。適切なクラスメソッドのために継承ツリーを検索する "invoke method"でした。あなたが使用しているいくつかの縮退/デフォルトのバージョンの '呼び出しメソッド'、または完全に何かを記述ですか? – jonathan

+0

まあ、Perl 6はCではありません。アンパサンドのないサブルーチンについて言えば、それを呼び出します。 – moritz

+0

あなたの2番目の質問に答えると、 '$ obj.method'は実際にはメソッド呼び出しですが、' $ obj。$ coderef'はそうではありません。 – moritz

関連する問題