有时我看到一些带有以下表达式的示例代码:
example = example' []
或者之间有什么不同:
foldl
foldl'
谢谢
答案 0 :(得分:18)
'
只是另一个标识符字符。 foldl'
与foldl
完全不同;它也可以被称为strictFold
。之所以称它是因为它与foldl
密切相关:它是foldl
,其中累加器在每一步都被评估,因此大的thunk不会积累。例如,foldl (+) 0
会在大型列表中溢出堆栈,但foldl' (+) 0
不会。
通常,'
的后缀表示以下三种情况之一:foo'
是为定义foo
而定义的辅助定义,foo
的修改版本(即state
,state'
和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 = ...
当我第一次看到它时,我觉得这很有趣。撇号只是标识符中的另一个字符。