2011-06-22 77 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