GHC如何处理由多个线程访问的thunk(显式线程或者评估火花的内部线程)? multithreading可以评估同一个thunk,重复工作吗? 或者,如果thunk是同步的,怎么样,这样的performance不受影响?
我在今天发现了unix中的“time”命令,并认为我会用它来检查Haskell中的尾recursion函数和正常recursion函数之间的运行时间差异。 我写了以下function: –tail recursive fac :: (Integral a) => a -> a fac x = fac' x 1 where fac' 1 y = y fac' xy = fac' (x-1) (x*y) –normal recursive facSlow :: (Integral a) => a -> a facSlow 1 = 1 facSlow x = x * facSlow (x-1) 记住这些是完全用于这个项目的,所以我没有费心检查零或负数。 但是,在为每个方法编写一个主要方法时,编译它们并使用“time”命令运行它们,都具有与正常recursion函数相似的运行时间。 这与我在Lisp中关于尾recursion优化方面所听到的相反。 这是什么原因?
在带有lambda b93的JDK 8中,在b93中有一个java.util.stream.Streams.zip类,可用于压缩stream(这在“ 探索Java8 Lambdas第1部分”中由Dhananjay Nene说明 )。 这个function: 创build一个惰性的顺序组合stream,其元素是组合两个stream的元素的结果。 然而在B98中这个消失了。 事实上Streams类在b98的java.util.stream中甚至是不可访问的。 这个function是否已经被移动,如果是的话,我应该如何使用b98简洁地压缩数据stream? 我想到的应用程序是在这个沉的java实现 ,我在那里取代了zip的function static <T> boolean every(Collection<T> c1, Collection<T> c2, BiPredicate<T, T> pred) static <T> T find(Collection<T> c1, Collection<T> c2, BiPredicate<T, T> pred) function相当详细的代码(它不使用b98的function)。