324得票9回答
什么是弱头正规式?

弱头正规形式 (WHNF) 是什么意思?头正规形式 (HNF) 和 正规形式 (NF) 又是什么意思? Real World Haskell指出: “熟悉的 seq 函数将表达式求值到我们所谓的头正规形式(缩写为HNF)。它在到达最外层构造器(即“头部”)后停止。这与正规形式(NF)不同,...

92得票8回答
Haskell的严格性点是什么?

我们都知道(或者应该知道)Haskell默认是惰性的,直到必须对其进行求值才会进行任何计算。那么什么时候必须对某些内容进行求值呢?这些点我们称之为“严格性点”,尽管这个术语并不像我所以为的那样广泛。根据我的理解: Haskell中的规约(或求值)只在严格性点处发生。 所以问题是:什...

33得票4回答
数据类型中严格字段的优势

这可能有点模糊,但我一直在想这个问题。据我所知,使用!,可以确保在构造值之前评估数据构造函数的参数:data Foo = Bar !Int !Float 我经常认为懒惰是一件好事。现在,在查看源代码时,我发现比起没有 ! 的变量,更多的是严格字段。 这样做的优点是什么?为什么我不能像以前那样...

32得票3回答
未装箱的类型和严格性之间有什么关系?

非装箱类型(如Int#)及严格函数(如f(!x)=...)是不同的,但我认为它们存在概念上的相似之处——它们以某种方式禁止了thunk/惰性。如果Haskell像Ocaml一样是一种严格语言,那么每个函数都将是严格的,并且每种类型都将是非装箱的。非装箱类型和强制严格性之间有什么关系?

32得票1回答
什么是"脊柱严格性"?

在Haskell中,术语脊柱严格性通常与惰性评估相关。虽然我对其含义有些模糊的了解,但希望能够有更加具体的解释: 数据结构的脊柱(spine)是什么? 脊柱严格性是什么意思? 相比于惰性数据结构,脊柱严格性有哪些优点?

24得票4回答
Haskell程序的性能分析

我有一段代码,用sequence从一个概率分布中重复采样。实际上,它做的事情类似于这样:sampleMean :: MonadRandom m => Int -> m Float -> m Float sampleMean n dist = do xs <- seq...

23得票2回答
foldl是否比它的严格版本foldl'更可取?

Haskell有两个用于列表的左折叠函数:foldl和一个“严格”版本foldl'。非严格的foldl的问题在于它会构建一个thunk的堆栈: foldl (+) 0 [1..5] --> ((((0 + 1) + 2) + 3) + 4) + 5 --> 15 这种方式会浪...

18得票4回答
Haskell中的运算符&&是否严格?

例如,我有一个操作 fnB :: a -> Bool,除非 fnA :: Bool 返回 False,否则它没有意义。在C语言中,我可以将这两个操作组合在一个if块中:if( fnA && fnB(a) ){ doSomething; } 在C语言中,使用 fnA 返回f...

15得票2回答
严格的Maybe在数据定义中的含义

我看过很多演讲/阅读博客文章,都提到应该在data中有严格的字段以避免各种性能问题,例如: data Person = Person { personName :: !Text , personBirthday :: !UTCTime } 这对我来说完全有...

13得票1回答
在模式匹配中,是否有关于评估顺序的保证?

以下内容(&&) :: Bool -> Bool -> Bool False && _ = False True && False = False True && True = True 具有所需的短路属性 False...