2012-04-28 143 views
8

有时候,我看到了下面的表达式一些示例代码:撇号在Haskell中意味着什么?

example = example' [] 

或之间有什么不同:

foldl 
    foldl' 

谢谢

+0

结帐还我的答案关于中缀运算符在这里:http://stackoverflow.com/a/29894487/1874049 – 2015-04-27 11:33:09

回答

17

'简直就像任何其他的另一个标识字符。 foldl'是与foldl完全分离的功能;它也可以称为strictFold。这就是所谓的,因为它与foldl密切相关:它是一个foldl,每一步都对累加器进行评估,因此不会形成大的thunk。例如,foldl (+) 0会使堆栈溢出,但foldl' (+) 0不会。

通常,'的后面添加表示以下三种情况之一:foo'要么是用于定义foo,的foo的修改版本(即,statestate',和state''可以是的目的制成的辅助定义初始状态和两个更新版本)或严格版本foo

+4

此外,它被读为“总理”。 – 2012-04-28 11:55:54

+4

你在3分钟内回答了这个问题,这可能是打字的时间。我看到它,就像是“嘿哈斯克尔的问题,我可以回答,并没有人回答,带回代表训练”,当我从一个20k的代表出现新的答案,告诉我什么是I正要说。你,专家,应该真的给我们这样的人留下一些问题...... :) – 2012-04-28 12:03:58

+0

@CodingTales,无论如何回答它!你可能会略有不同地解释,并且品种总是很好! :) – huon 2012-04-28 12:40:16

2

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

3

没什么,至少在这种情况下,因为一个撇号是有效的标识符的字符(见this answer一些更多的细节。)

它是在标准库位的公约的一个严格的版本某些功能与标准(懒惰)版本的撇号不同,例如foldl'(严格)和foldl(懒惰)。这与撇号很特别没有关系,但这只是一个惯例。

0

有一个hackage模块(我忘记了哪个模块)包含某种成员测试(或其他谓词)。测试功能被称为“是”:

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

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

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

我认为这是有趣赫克,当我第一次看到它。撇号只是标识符中的另一个字符。

+0

我还没有找到这个功能的文档,但我只是围绕着haskell的这个特性:在你的情况下,我猜这个函数实际上叫做'''is'''没有撇号,并且打算用来像那个:'''是什么''''。但与撇号它可以像你使用它一样使用!如果任何人都可以提供任何关于如何详细使用它的链接,那将是非常好的! – 2015-04-27 09:45:44

+0

找到它了:https://wiki.haskell.org/Infix_operator – 2015-04-27 11:31:44