2011-04-15 126 views
15

標識符我發現這個代碼剪斷在互聯網上:撇號在Haskell

digits 0 = [0] 
digits n = digits' n [] 
    where digits' 0 ds = ds 
     digits' n ds = let (q,r) = quotRem n 10 
         in digits' q (r:ds) 

sumOfDigits = sum . digits 

有人能快速解釋一下什麼是遞歸函數調用後的「'」號(digits n = digits' n [])是?我在Haskell中看到了一些其他的代碼示例(教程),但我不明白這個。感謝您的快速解釋。

+0

我個人儘量避免在我的標識符中使用撇號,因爲我太迷人了描述性和有意義的短語。 – jcarpenter2 2014-01-23 23:59:29

回答

30

撇號只是名稱的一部分。這是Haskell採用的命名約定(慣用法)。

Haskell中的約定是,like in math,變量名上的撇號表示與先前變量有某種相關性或相似性的變量。

一個例子:

let x = 1 
    x' = x * 2 
in x' 

x'有關x,我們表明,用撇號。


您可以GHCI的方式運行此,

Prelude> :{ 
Prelude| let x = 1 
Prelude|  x' = x * 2 
Prelude| in x' 
Prelude| :} 
2 
+0

您的示例不起作用。無論是.hs文件還是直接寫入解釋器。 – kiltek 2011-04-15 08:16:04

+0

@ user504060:嘗試'let {x = 1; x'= x * 2}。 (多行構造在ghci中不起作用,表達式不在Haskell源文件的頂層。) – dave4420 2011-04-15 08:21:13

+1

這是一個Haskell表達式。我編輯了答案以顯示如何評估GHCi中的多行表達式。 – 2011-04-15 08:23:08

7

它只是允許標識符另一個字符。把它想成另一封信。