'在Haskell函数名中的含义?

时间:2009-07-30 16:11:46

标签: haskell naming-conventions

引用'的用途是什么?我已经阅读了有关curried函数的内容,并阅读了两种定义add函数的方法 - curried和uncurried。咖喱版...

myadd' :: Int -> Int -> Int
myadd' x y = x + y

......但如果没有引用它同样有效。那么'是什么意思?

5 个答案:

答案 0 :(得分:22)

引用对Haskell毫无意义。它只是该功能名称的一部分。

人们倾向于将此用作“内部”功能。如果你有一个使用累加器参数对列表求和的函数,你的求和函数将需要两个参数。这很丑陋,因此你创建了两个args的sum'函数,以及一个像sum这样的arg的sum list = sum' 0 list函数。

编辑,也许我应该只显示代码:

sum' s [] = s
sum' s (x:xs) = sum' (s + x) xs

sum xs = sum' 0 xs

你这样做是为了sum'是尾递归的,所以“公共API”很好看。

答案 1 :(得分:16)

它通常发音为“prime”,因此这将是“myadd prime”。它通常用于表示计算中的下一步,或替代。

所以,你可以说

add = blah
add' = different blah

或者

f x = 
  let x' = subcomputation x
  in blah.

这只是一种习惯,比如使用int i作为Java,C等for循环中的索引。

编辑:现在我已经添加了所有单词和代码格式,这个答案更有帮助。 :)我一直忘记这不是一个WYSIWYG系统!

答案 2 :(得分:9)

在这个例子中,'字符没有特别的意义;它只是标识符的一部分。换句话说,myaddmyadd'是不同的无关的函数。

传统上,'用于表示某种逻辑评估关系。因此,假设函数myaddmyadd'将相关,以便myadd'可以从myadd派生。这是一种源自学术界的形式逻辑和证明的惯例(Haskell的根源)。我应该强调这只是 一个约定,Haskell不会强制执行它。

答案 3 :(得分:6)

quote'是Haskell名称中的另一个允许字符。它通常用于定义函数的变体,在这种情况下,引用发音为'prime'。具体来说,Haskell库使用quote-variants来表明变量是严格的。例如:foldl是懒惰的,foldl'是严格的。

在这种情况下,看起来引用只是用来分隔咖喱和未发现的变体。

答案 4 :(得分:1)

正如其他人所说,'对Haskell本身没有任何意义。它只是一个字符,如字母或数字。

'用于表示函数的替代版本(在foldlfoldl'的情况下)或辅助函数。有时,您甚至会在函数名称上看到多个'。在函数名称的末尾添加'比编写someFunctionHelpersomeFunctionStrict简洁得多。

这种表示法的起源是数学和物理学,其中,如果你有一个函数f(x),它的推导词通常表示为f'(x)