是否有一种编程语言可以在省略命名参数时执行柯里化?
题
许多函数式编程语言都支持 柯里化参数。为了支持柯里化函数,函数的参数本质上是一个元组,其中最后一个参数可以省略,从而使新函数需要更小的元组。
我正在考虑设计一种总是使用记录的语言(又名 命名参数) 作为函数参数。
因此,在我的假设语言中,简单的数学函数将是:
add { left : num, right : num } = ...
minus { left : num, right : num } = ..
您可以将任何记录传递给这些函数,只要它们具有这两个命名参数(它们可以具有更多的“左”和“右”参数)。
如果它们只有一个命名参数,则会创建一个新函数:
minus5 :: { left : num } -> num
minus5 = minus { right : 5 }
我借用了上面的一些 Haskell 符号.
有人见过一种语言可以做到这一点吗?
解决方案
OCaml 具有命名参数,并且柯里化是自动的(尽管有时在处理可选参数时需要类型注释),但它们不是元组:
Objective Caml version 3.11.2
# let f ~x ~y = x + y;;
val f : x:int -> y:int -> int = <fun>
# f ~y:5;;
- : x:int -> int = <fun>
# let g = f ~y:5;;
val g : x:int -> int = <fun>
# g ~x:3;;
- : int = 8
其他提示
当然, 数学 可以做那种事。
不隶属于 StackOverflow