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

问题描述 投票:0回答:1

这可能是一个超级愚蠢的问题,但我不明白。 什么是

(string * string) list -> (string -> string)
是什么意思? 尤其是最后一部分
(string -> string)
。你怎样才能做到这一点?

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

ocaml
1个回答
5
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.