Haskell中标识符中的撇号

Haskell中标识符中的撇号,haskell,coding-style,identifier,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[])是什么意思吗?我在

我在互联网上发现了以下代码:

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

撇号只是名字的一部分。这是Haskell采用的命名约定(习语)

Haskell的惯例是,变量名上的撇号表示与先前变量相关或类似的变量

例如:

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

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

你的例子不起作用。既不在.hs文件中,也不直接写入解释器。@user504060:尝试
将{x=1;x'=x*2}放入x'
。(多行构造与ghci中的不一样,表达式也不在Haskell源文件的顶层。)这是一个Haskell表达式。我编辑了答案,以说明如何在GHCi中计算多行表达式。+1用于说明如何在GHCi中使用布局。我不知道。我个人尽量避免在标识符中使用撇号,因为我太喜欢描述性和有意义的短语。