撇号在Haskell中意味着什么?

时间:2012-04-28 11:51:42

标签: haskell

有时我看到一些带有以下表达式的示例代码:

    example = example' []

或者之间有什么不同:

    foldl
    foldl'

谢谢

4 个答案:

答案 0 :(得分:18)

'只是另一个标识符字符。 foldl'foldl完全不同;它也可以被称为strictFold。之所以称它是因为它与foldl密切相关:它是foldl,其中累加器在每一步都被评估,因此大的thunk不会积累。例如,foldl (+) 0会在大型列表中溢出堆栈,但foldl' (+) 0不会。

通常,'的后缀表示以下三种情况之一:foo'是为定义foo而定义的辅助定义,foo的修改版本(即statestate'state''可以是初始状态和两个更新版本),也可以是foo的严格版本。

答案 1 :(得分:3)

没有,至少在那个上下文中没有,因为撇号是有效的标识符字符(有关更多细节,请参阅this answer。)

标准库中的某种惯例是某些函数的严格版本与标准(惰性)版本的区别在于撇号,例如foldl'(严格)和foldl (懒)。这与撇号特殊无关,但这只是一种惯例。

答案 2 :(得分:2)

在Haskell中,它只是区分标识符的另一个字符,然后标识符被称为fold prime,但它通常以与it used in mathematics相同的方式使用。

答案 3 :(得分:0)

有一个hackage模块(我忘了哪个)包含某种成员资格测试(或其他一些谓词)。测试函数称为“是”:

foo x | x `is` whatever = ...

为方便起见,还提供了函数的布尔否定:

bar x | x `isn't` whatever = ...

当我第一次看到它时,我觉得这很有趣。撇号只是标识符中的另一个字符。