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中使用布局。我不知道。我个人尽量避免在标识符中使用撇号,因为我太喜欢描述性和有意义的短语。