许多函数式编程语言都支持curried parameters。 为了支持currying函数,函数的参数本质上是一个元组,其中可以省略最后一个参数,使新函数需要更小的元组。
我正在考虑设计一种总是使用记录(又名named parameters)来表示函数参数的语言。
因此,我认为语言中的简单数学函数将是:
add { left : num, right : num } = ...
minus { left : num, right : num } = ..
您可以将任何记录传递给这些函数,只要它们具有这两个命名参数(它们可以有更多只是“左”和“右”)。
如果他们只有一个命名参数,则会创建一个新函数:
minus5 :: { left : num } -> num
minus5 = minus { right : 5 }
我在上面借用了一些haskell的符号。
是否有人看过这样做的语言?
答案 0 :(得分:4)
OCaml已命名参数并且currying是自动的(尽管在处理可选参数时有时需要类型注释),但它们不是tupled:
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
答案 1 :(得分:1)
当然, Mathematica 可以做到这一点。