Haskell 中标识符中的撇号

发布于 2024-11-01 11:12:25 字数 353 浏览 0 评论 0原文

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

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

I found this code snipped on the internet:

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

Can someone quickly explain what the " ' " sign ( digits n = digits' n [] ) after the recursive function call is for? I've seen some other code examples in Haskell (tutorials), but im not understandig this one. A quick explanation is appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

放赐 2024-11-08 11:12:25

撇号只是名称的一部分。它是 Haskell 中采用的命名约定(惯用语)。

Haskell 中的约定是,就像数学中的一样,变量上的撇号name 表示与先前变量以某种方式相关或相似的变量。

例如:

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

The apostrophe is just part of the name. It is a naming convention (idiom) adopted in Haskell.

The convention in Haskell is that, like in math, the apostrophe on a variable name represents a variable that is somehow related, or similar, to a prior variable.

An example:

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

x' is related to x, and we indicate that with the apostrophe.


You can run this in GHCi, by the way,

Prelude> :{ 
Prelude| let x  = 1
Prelude|     x' = x * 2
Prelude| in x'
Prelude| :}
2
雨后咖啡店 2024-11-08 11:12:25

它只是标识符中允许的另一个字符。将其视为另一封信。

It's just another character allowed in identifiers. Think of it as another letter.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文