2011-06-22 103 views
6

我正在看傻/可愛/輝煌"sleep sort" that seems to have originated over at 4chan。排序整數數組,這個想法是大致Perl6操作員問題

  
    foreach elt in @array 
     spawn thread(elt) 

其中螺紋(n)的確實

 
    sleep n 
    print n 

因此較小的值獲得此前打印。

有一個Perl6實施

 
@foo = @foo>>.&sleep; 

我得到>> 'hypers' 操作,而這種假設hypering自動並行化。但.&混淆了我。

任何人都可以解釋這一點嗎?

感謝

回答

8

如果你有一個函數​​,那麼你就可以抓住與符號,&yourfunc對它的引用。語法$obj.$function只用一個參數$obj調用$function。所以人們可以寫$function($obj) - 除了這個語法不允許使用hyper。

但誰想出了這個「執行」是錯誤的三個賬戶:

  • 超級運營商允許編譯器生成一個線程數,執行各個方法,它並沒有釀出線程爲所有他們一次 - 所以「隨機排序」不能工作
  • 超運算符可以隨機化的方法的執行順序,但它必須保存順序或返回的項目 - 所以@foo不會完全可以排序,即使第一點不適用。
  • sleep()應該返回睡眠秒數,而不是參數。如果有人在計算過程中將計算機設置爲睡眠狀態,則結果可能會更高。
+0

感謝您的回答,莫里茨。兩個後續步驟:首先,你是否需要&來獲取引用(我認爲在C中,一個函數的名字總是返回一個引用/指針,即使沒有&也是如此)。我想''。'是「調用方法」,即搜索繼承樹用於適當的類方法。你用這個描述了一些退化/默認版本的'invoke method',還是其他的東西? – jonathan

+0

那麼,Perl 6不是C.如果你提到一個沒有&符號的子程序,你可以調用它。 – moritz

+0

回答你的第二個問題:'$ obj.method'確實是一個方法調用,但是'$ obj。$ coderef'不是。 – moritz