6

4chanから始まったと思われるバカ/キュート/華麗な「スリープソート」を見ていました。intの配列を並べ替えるには、大まかに考えます。

    
    @arrayのforeachelt
        スポーンスレッド(elt)

ここで、thread(n)は

    睡眠n
    nを印刷

したがって、小さい値は早く印刷されます。

Perl6の実装があります

@foo = @foo >>。&sleep;

私はその >> 「ハイパー」演算子を取得し、これはハイパーが自動的に並列化されることを前提としています。しかし、.&私を混乱させます。

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

ありがとう

4

1 に答える 1

10

関数 がある場合はyourfunc、アンパサンドを使用してその参照を取得できます&yourfunc。この構文は、1 つの引数で$obj.$function呼び出すだけです。したがって、この構文ではハイパーの使用が許可されていないことを除いて、次のように書くこともできます。$function$obj$function($obj)

しかし、この「実装」を思いついた人は、次の 3 つの点で間違っていました。

  • ハイパー演算子を使用すると、コンパイラは各メソッドを実行するために多数のスレッドを生成できます。一度にすべてのスレッドを生成する必要はありません。そのため、「ランダム ソート」は機能しません。
  • ハイパー演算子はメソッドの実行順序をランダム化する場合がありますが、順序または返される項目を保持する必要があるため@foo、最初のポイントが適用されなかったとしても、まったくソートされません。
  • sleep() は、引数ではなく、眠った秒数を返すことになっています。誰かが計算中にコンピュータをスリープ状態に設定すると、結果ははるかに高い数値になる可能性があります。
于 2011-06-22T20:47:13.477 に答える