Programming languages 是否有一种编程语言在省略命名参数时执行curry?

Programming languages 是否有一种编程语言在省略命名参数时执行curry?,programming-languages,functional-programming,language-design,currying,named-parameters,Programming Languages,Functional Programming,Language Design,Currying,Named Parameters,许多函数式编程语言都支持。 为了支持curry函数,函数的参数本质上是一个元组,其中可以省略最后一个参数,从而使新函数需要更小的元组 我正在考虑设计一种总是使用记录(aka)作为函数参数的语言 因此,在我的虚拟语言中,简单的数学函数是: add { left : num, right : num } = ... minus { left : num, right : num } = .. 您可以将任何记录传递给这些函数,只要它们有这两个命名参数(它们可以有更多的“左”和“右”) 如果它们只有一

许多函数式编程语言都支持。 为了支持curry函数,函数的参数本质上是一个元组,其中可以省略最后一个参数,从而使新函数需要更小的元组

我正在考虑设计一种总是使用记录(aka)作为函数参数的语言

因此,在我的虚拟语言中,简单的数学函数是:

add { left : num, right : num } = ...
minus { left : num, right : num } = ..
您可以将任何记录传递给这些函数,只要它们有这两个命名参数(它们可以有更多的“左”和“右”)

如果它们只有一个命名参数,则会创建一个新函数:

minus5 :: { left : num } -> num
minus5 = minus { right : 5 }
我借用了haskell的一些符号来表示上述内容


有人见过这样做的语言吗?

当然,Mathematica可以做这类事情。

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
目标Caml版本3.11.2
#设f~x~y=x+y;;
val f:x:int->y:int->int=
#f~y:5;;
-:x:int->int=
#设g=f~y:5;;
val g:x:int->int=
#g~x:3;;
-:int=8

很长一段时间以来,我已经多次使用OCaml,出于某种原因,我认为您无法做到这一点,但看起来我错了。我想知道F#是否能做同样的事情-ThanksF#不支持命名参数我想它只适用于可以使用命名参数的对象构造函数。C#4.0将支持命名参数:)我认为你可能是错误的,因为:事实上,F#支持命名参数(有限形式)@Ken Bloom我可以看出使用“部分函数完成”一词是多么含糊不清。我实际上是指“部分应用”,有某种认知上的不协调,使用了前面提到的术语。谢谢你纠正这一点。