Апостроф в идентификаторах в Haskell

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

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 (учебники), но я не понимаю этого. Быстрое объяснение приветствуется.

Ответы

Ответ 1

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

Ответ 2

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