引用'
的用途是什么?我已经阅读了有关curried函数的内容,并阅读了两种定义add函数的方法 - curried和uncurried。咖喱版...
myadd' :: Int -> Int -> Int
myadd' x y = x + y
......但如果没有引用它同样有效。那么'
是什么意思?
答案 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)
在这个例子中,'
字符没有特别的意义;它只是标识符的一部分。换句话说,myadd
和myadd'
是不同的无关的函数。
传统上,'
用于表示某种逻辑评估关系。因此,假设函数myadd
和myadd'
将相关,以便myadd'
可以从myadd
派生。这是一种源自学术界的形式逻辑和证明的惯例(Haskell的根源)。我应该强调这只是 一个约定,Haskell不会强制执行它。
答案 3 :(得分:6)
quote'是Haskell名称中的另一个允许字符。它通常用于定义函数的变体,在这种情况下,引用发音为'prime'。具体来说,Haskell库使用quote-variants来表明变量是严格的。例如:foldl
是懒惰的,foldl'
是严格的。
在这种情况下,看起来引用只是用来分隔咖喱和未发现的变体。
答案 4 :(得分:1)
正如其他人所说,'
对Haskell本身没有任何意义。它只是一个字符,如字母或数字。
'
用于表示函数的替代版本(在foldl
和foldl'
的情况下)或辅助函数。有时,您甚至会在函数名称上看到多个'
。在函数名称的末尾添加'
比编写someFunctionHelper
和someFunctionStrict
简洁得多。
这种表示法的起源是数学和物理学,其中,如果你有一个函数f(x)
,它的推导词通常表示为f'(x)
。