有时我会看到带有以下表达式的代码:
example = example' []
或者这些功能之间有什么不同?
foldl
foldl'
'
只是另一个标识符字符,就像任何其他字符一样。foldl'
是一个完全独立的函数foldl
;它也可以称为strictFold
. 之所以这样称呼它是因为它与foldl
: 它foldl
是在每一步都对累加器进行评估的地方,因此不会产生大的 thunk。例如,foldl (+) 0
将溢出一个大列表上的堆栈,但foldl' (+) 0
不会。
通常,a 的后缀'
意味着以下三件事之一:foo'
要么是为定义 而制定的辅助定义, (即,,,并且可以是初始状态和两个更新版本)foo
的修改版本,或者是严格的的版本。foo
state
state'
state''
foo
什么都没有,至少在这种情况下没有,因为撇号是一个有效的标识符字符(有关更多详细信息,请参阅此答案。)
标准库中的一个约定是,某些函数的严格版本与标准(惰性)版本通过撇号区分开来,例如foldl'
(strict) 和foldl
(lazy)。这与撇号的特殊性无关,这只是一个约定。
在 Haskell 中,它只是区分标识符的另一个字符,然后调用标识符fold prime
,但它的常用方式与数学中使用的方式相同。
有一个 hackage 模块(我忘了是哪个),其中包含某种成员资格测试(或其他谓词)。测试函数称为“is”:
foo x | x `is` whatever = ...
为方便起见,还提供了函数的布尔否定:
bar x | x `isn't` whatever = ...
当我第一次看到它时,我觉得它很有趣。撇号只是标识符中的另一个字符。