Апостроф в идентификаторах в Haskell - PullRequest
20 голосов
/ 15 апреля 2011

Я нашел этот код в интернете:

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 ]

36 голосов
/ 15 апреля 2011

Апостроф это просто часть имени.Это соглашение об именах (идиома), принятое в 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
8 голосов
/ 15 апреля 2011

Это просто еще один символ, допустимый в идентификаторах.Думайте об этом как о другой букве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...