10

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

我正在考虑设计一种始终使用记录(又名参数)作为函数参数的语言。

因此,我相信语言中的简单数学函数将是:

add { left : num, right : num } = ...
minus { left : num, right : num } = ..

您可以将任何记录传递给这些函数,只要它们具有这两个命名参数(它们可以有更多“左”和“右”)。

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

minus5 :: { left : num } -> num
minus5 = minus { right : 5 }

我在上面借用了一些haskell 的符号

有没有人见过这样的语言?

4

2 回答 2

5

OCaml 具有命名参数并且currying 是自动的(尽管有时在处理可选参数时需要类型注释),但它们不是元组:

    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
于 2010-06-10T16:37:08.530 回答
1

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

于 2010-06-10T13:59:16.923 回答