Functional programming Ocaml:成对匹配一个项目

Functional programming Ocaml:成对匹配一个项目,functional-programming,ocaml,extract,Functional Programming,Ocaml,Extract,我有一个函数,它接受一个temp,它是一对 type temp = (pd * string);; 我想在temp中提取该字符串。但我不能写一个函数,它只能在temp上匹配,因为它是一个类型 我写了一个函数: let print_temp(t:temp) (out: out_channel) : unit = fun z -> match z with (_,a) -> output_string out a " ;; 但这给了我一个错误,说它

我有一个函数,它接受一个temp,它是一对

type temp = (pd * string);;
我想在temp中提取该字符串。但我不能写一个函数,它只能在temp上匹配,因为它是一个类型

我写了一个函数:

let print_temp(t:temp) (out: out_channel) : unit = 
    fun z -> match z with 
            (_,a) -> output_string out a "
;;

但这给了我一个错误,说它不是一个函数。我基本上想提取那个字符串并打印出来。如果您对此有任何意见,我们将不胜感激。

您的解决方案几乎是正确的——您不需要“有趣的z->”部分,而且看起来您可能有一个无关的部分。相反,您需要与t进行模式匹配,如下所示:

let print_temp (t:temp) (out:out_channel) : unit =
  match t with
    (_,a) -> output_string out a
您还可以通过函数定义中的模式匹配更简洁地执行此操作:

let print_temp ((_,a):temp) (out:out_channel) : unit = output_string out a
在您的代码中,您得到的类型错误告诉您,您声明了print_temp以返回单元,但实际上返回了一个函数(fun z->…)。请注意,由于t:temp是您想要“分解”的对象,因此您可以在其上进行模式匹配。

而不是

match t with (_, a) -> output_string out a
您还可以使用函数fst(和snd)

或者更简洁

output_string out (fst t)
output_string out (fst t)