单引号 '
用于什么?我已经阅读有关柯里化函数的内容并了解了定义 add 函数的两种方式 - 柯里化和非柯里化。柯里化版本...
myadd' :: Int -> Int -> Int
myadd' x y = x + y
...但是即使没有引号也能正常工作。那么'
有什么意义呢?
单引号 '
用于什么?我已经阅读有关柯里化函数的内容并了解了定义 add 函数的两种方式 - 柯里化和非柯里化。柯里化版本...
myadd' :: Int -> Int -> Int
myadd' x y = x + y
...但是即使没有引号也能正常工作。那么'
有什么意义呢?
该引用对于Haskell来说没有意义,它只是该函数名称的一部分。
人们倾向于将其用于“内部”函数。如果您有一个通过使用累加器参数对列表求和的函数,则您的求和函数将使用两个参数。这很丑陋,因此您可以创建一个带有两个参数的sum'
函数,以及一个带有一个参数的sum
函数,例如sum list = sum' 0 list
。
编辑,也许我应该展示代码:
sum' s [] = s
sum' s (x:xs) = sum' (s + x) xs
sum xs = sum' 0 xs
你这样做是为了使sum'
成为尾递归,并使“公共 API”看起来更加优美。
sum' s (x:xs) = sum (s + x) xs
。虽然类型系统会在这里发出警告,但如果函数具有相同的类型,则很难发现。 - mk12它的发音通常为“普赖姆”,因此可以发音为“myadd prime”。它通常用于表示计算中的下一步或替代方案。
因此,您可以说:
add = blah
add' = different blah
或者f x =
let x' = subcomputation x
in blah.
这只是一种习惯,就像在Java、C等中使用int i作为for循环的索引一样。
编辑:我希望现在添加了所有词汇和代码格式后,这个答案会更有帮助。 :) 我总是忘记这不是所见即所得系统!
'
字符没有特定的意义; 它只是标识符的一部分。换句话说,myadd
和myadd'
是不同的、不相关的函数。'
用于表示一些逻辑评估关系。因此,假设函数myadd
和myadd'
会有关联,使得可以从myadd
推导出myadd'
。这是从学术界(Haskell的根源所在)的形式逻辑和证明中推导出来的惯例。需要强调的是,这仅仅是一个惯例,Haskell不强制执行它。单引号在Haskell名称中只是另一个允许的字符。它经常用于定义函数的变体,在这种情况下,单引号发音为“prime”。具体来说,Haskell库使用引号变体来显示变体是严格的。例如:foldl
是惰性的,foldl'
是严格的。
在这种情况下,看起来引号只是用于分隔柯里化和非柯里化的变量。
'
并没有任何意义。它只是一个字符,就像字母或数字一样。
'
用于表示函数的替代版本(在foldl
和foldl'
的情况下)或辅助函数。有时,您甚至会在函数名上看到几个'
。在函数名后面添加'
比编写someFunctionHelper
和someFunctionStrict
更加简洁。f(x)
,它的导数通常表示为f'(x)
。