Haskell中标识符中的撇号

时间:2011-04-15 07:58:41

标签: haskell coding-style identifier

我发现这段代码在互联网上被剪断了:

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(教程)中看到了一些其他的代码示例,但我不明白这个。一个快速的解释表示赞赏。

2 个答案:

答案 0 :(得分:36)

撇号只是名字的一部分。它是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

答案 1 :(得分:8)

这只是标识符中允许的另一个字符。把它想象成另一封信。