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