【问题标题】:OCaml: what does (string * string) list -> (string -> string) mean?OCaml:(字符串*字符串)列表->(字符串->字符串)是什么意思?
【发布时间】:2022-01-21 04:39:10
【问题描述】:

这可能是一个超级愚蠢的问题,但我不明白。 做什么 (string * string) list -> (string -> string) 是什么意思? 尤其是最后一部分(string -> string)。你怎么能做到这一点?

我以为它是一个内部函数,但我猜不是。

【问题讨论】:

    标签: ocaml


    【解决方案1】:

    string -> string 表示接受string 并返回string 的函数。同样,int -> int 将表示。接受int 并转换为int 的函数。

    string * string 表示两个字符串的元组。 (string * string) list 表示这些元组的列表。

    所以:

    (string * string) list -> (string -> string)
    

    表示一个函数,它接受一个包含两个字符串的元组列表,并返回一个接受一个字符串并返回一个字符串的函数。

    熟悉这种语法是个好主意,因为您会看到很多它。

    一个非常简单的函数匹配这个类型如下所示。请注意,其中包含的模式匹配并非详尽无遗。

    let f : (string * string) list -> (string -> string) = 
      fun ((a,b)::_) -> fun x -> x ^ a ^ b
    

    在顶层尝试此操作时,您将看到以下类型。由于函数在 OCaml 中的工作方式,它等同于您询问的类型签名,尽管缺少括号。

    (string * string) list -> string -> string
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-01
      • 2012-05-25
      • 1970-01-01
      • 2011-06-10
      • 2013-01-09
      • 1970-01-01
      • 2017-11-07
      • 2013-12-13
      相关资源
      最近更新 更多