小编Mat*_*ams的帖子

为什么foldr使用辅助函数?

foldr向Haskell新手解释时,规范定义是

foldr            :: (a -> b -> b) -> b -> [a] -> b
foldr _ z []     =  z
foldr f z (x:xs) =  f x (foldr f z xs)
Run Code Online (Sandbox Code Playgroud)

但在GHC.Base中,foldr定义为

foldr k z = go
          where
            go []     = z
            go (y:ys) = y `k` go ys
Run Code Online (Sandbox Code Playgroud)

看起来这个定义是对速度的优化,但我不明白为什么使用辅助函数go会使它更快.源评论(见这里)提到了内联,但我也没有看到这个定义如何改进内联.

haskell fold

27
推荐指数
4
解决办法
1000
查看次数

C++:获取通用代码中对象大小的最佳方法

我正在编写一个模板类,它调用一个哈希函数,该函数将一个指向对象的指针和该对象的大小作为参数.

例如,如果item是类型int,则调用将是.
MurmurHash2(&item, sizeof(item), seed);
但如果itemstd::string,我们将不得不这样做
MurmurHash2(item.c_str(), item.size(), seed);

编写此代码的最简洁方法是什么,以便它可以处理尽可能多的类型?

c++ templates

0
推荐指数
1
解决办法
184
查看次数

标签 统计

c++ ×1

fold ×1

haskell ×1

templates ×1