标签: currying

在 Scala 中使用部分函数时,我可以应用参数默认值吗

我定义了两个部分函数(散列),我希望它们采用可选的第二个布尔参数:

def SHA1 = hash(MessageDigest.getInstance("SHA-1"))_
def MD5 = hash(MessageDigest.getInstance("MD5"))_
private def hash(algorithm:HashAlgorithm)(s:String, urlencode:Boolean = false) = {
    val form = if (urlencode) "%%%02X" else "%02X"
    (algorithm.digest(s.getBytes) map(form format _)).mkString
}
Run Code Online (Sandbox Code Playgroud)

当我使用两个参数调用该函数时,它会编译,但只有一个参数时我会收到编译错误:

// First 3 tests are fine
val test1 = hash(MessageDigest.getInstance("SHA-1"))("foo", true)
val test2 = hash(MessageDigest.getInstance("SHA-1"))("foo")
val test3 = SHA1("foo", true)
// not enough arguments for method apply: (v1: String, v2: Boolean)String in trait Function2. Unspecified value parameter v2.
val test4 = SHA1("foo") 
Run Code Online (Sandbox Code Playgroud)

我只是将其重构为使用部分函数,​​在重构之前,我可以强制哈希函数使用默认值而不会出现任何问题。

为什么部分函数实现无法允许默认参数的任何想法?我使用部分函数和柯里化一起做错了吗?

scala currying partial-functions

0
推荐指数
1
解决办法
562
查看次数

Curry 函数 - 如何调用 3 个(或多个)函数?

我试图在 kotlin 中咖喱一个函数,这样我就可以这样称呼它

myAdditionFunction(1)(2)(3)
Run Code Online (Sandbox Code Playgroud)

这个调用将返回 6 因为1+ 2 + 3 = 6

我只需要它对所有数字进行加法。实际上我真的希望它在未来做一个构建器模式,但仍然试图看看 curry 函数是如何工作的。这是我到目前为止所拥有的:

fun myAdditionFunction(x: Int) {     { y: Int -> x + y }
Run Code Online (Sandbox Code Playgroud)

这适用于两个参数。所以 myAdditionFunction(1)(2) 将打印 3。

我希望它适用于 3 个或多个:这是我为 3 个参数尝试过的:

fun myAdditionFunction(x: Int) {
        var sum = 0
        return { y: Int ->
             sum = x + y
            sum }
        }
Run Code Online (Sandbox Code Playgroud)

我如何将总和向前推进以及如何使其采用第三个内部功能?它不会编译。

但它不会编译

currying kotlin

0
推荐指数
1
解决办法
666
查看次数

节是柯里化的结果吗?

Hutton 的 Haskell 编程

一般来说,if 是一个运算符,则参数 和 的 #形式的表达式 称为节,其作为函数的含义可以使用 lambda 表达式形式化,如下所示:(#)(x #)(# y)xy

(#)   =   \x  ->  (\y ->  x   #   y)
(x    #)  =   \y  ->  x   #   y
(#    y)  =   \x  ->  x   #   y
Run Code Online (Sandbox Code Playgroud)

“部分”和“柯里化”有什么区别和关系?

一个部分是将柯里化操作应用于多参数函数的结果吗?

谢谢。

haskell operators currying partial-application operator-sections

0
推荐指数
1
解决办法
381
查看次数

函数 g = (.).(.) 的类型是什么?

答案是:(a -> b) -> (c -> d -> a) -> c -> d -> b

但我不知道怎么去那里。

haskell types type-inference currying parametric-polymorphism

0
推荐指数
1
解决办法
147
查看次数