代码之家  ›  专栏  ›  技术社区  ›  Adam Gent

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

  •  9
  • Adam Gent  · 技术社区  · 16 年前

    curried parameters .

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

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

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

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

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

    我借用了一些haskell的符号来表示上面的内容

    有人见过这样的语言吗?

    2 回复  |  直到 16 年前
        1
  •  5
  •   ygrek    16 年前

    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
    
        2
  •  1
  •   High Performance Mark    16 年前

    当然, 我能做那种事。