2012-04-28 138 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