(string * string) list -> (string -> string) 是什么意思?

xen*_*a_h 0 ocaml

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

我认为这是一个内部函数,但我猜不是。

Chr*_*ris 5

string -> string表示一个接受 astring并返回 a 的函数string。类似地,int -> int表示一个接受int并将 转换为 的函数int

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

所以:

(string * string) list -> (string -> string)
Run Code Online (Sandbox Code Playgroud)

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

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

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

let f : (string * string) list -> (string -> string) = 
  fun ((a,b)::_) -> fun x -> x ^ a ^ b
Run Code Online (Sandbox Code Playgroud)

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

(string * string) list -> string -> string
Run Code Online (Sandbox Code Playgroud)