这可能是一个超级愚蠢的问题,但我不明白。这是什么
(string * string) list -> (string -> string)意思?尤其是最后一部分(string -> string)。你怎样才能做到这一点?
我认为这是一个内部函数,但我猜不是。
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)