'在Haskell函数名中的含义?

use*_*056 10 haskell naming-conventions

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

myadd' :: Int -> Int -> Int
myadd' x y = x + y
Run Code Online (Sandbox Code Playgroud)

......但没有引用它同样有效.那有什么意义'呢?

jro*_*way 22

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

人们倾向于将其用于"内部"功能.如果你有一个使用累加器参数对列表求和的函数,你的求和函数将需要两个参数.这是丑陋的,所以你创建了sum'两个args的sum函数,并且有一个arg 的函数sum list = sum' 0 list.

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

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

sum xs = sum' 0 xs
Run Code Online (Sandbox Code Playgroud)

你这样做是为了sum'尾递归,所以"公共API"很好看.


ago*_*nst 16

它通常被称为"素数",所以这将是"myadd prime".它通常用于表示计算中的下一步,或者替代.

所以,你可以说

add = blah
add' = different blah
Run Code Online (Sandbox Code Playgroud)

要么

f x = 
  let x' = subcomputation x
  in blah.
Run Code Online (Sandbox Code Playgroud)

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

编辑:现在我已经添加了所有单词和代码格式,这个答案更有帮助.:)我继续忘记这不是一个所见即所得的系统!


Dan*_*wak 9

'在这种情况下,角色没有特别的意义; 它只是标识符的一部分.换句话说,myadd并且myadd'是不同的,不相关的功能.

但是,传统上,'它用于表示某种逻辑评估关系.因此,假设的功能myaddmyadd'相关的myadd'可以从中得出myadd.这是一种源自学术界的形式逻辑和证明的惯例(Haskell的根源).我应该强调这只是一个惯例,Haskell并没有强制执行它.


Nat*_*ers 6

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

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