OCaml,函数返回元组

时间:2015-11-06 22:12:01

标签: ocaml

我定义了4个返回类型(int * int)元组的函数,如下所示 所有这些功能都经过测试。

let f1 (p1, p2, p3, p4) =
 if <condition> then p1
 ....
 else p4

如何定义一个函数,它将使用这4个函数的输出来返回一个类型的元组(int * int,int * int,int * int,int * int)

let test(p1, p2, p3, p4) =
  (f1(p1, p2, p3, p4), f2(p1, p2, p3, p4), f3(p1, p2, p3, p4), f4(p1, p2, p3, p4))

OCaml interpeter给我一个语法错误,它并没有真正告诉我任何事情。

3 个答案:

答案 0 :(得分:2)

我在这里显示的代码中没有发现任何问题。您很可能必须显示更多代码。查看编译器的具体错误也会有所帮助。

这里有一些返回3对的代码(只是为了让示例更小):

# let f (x, y) = (x + 1, y + 1);;
val f : int * int -> int * int = <fun>
# let g (x, y) = (f (x, y), f (x, y), f (x, y));;
val g : int * int -> (int * int) * (int * int) * (int * int) = <fun>

答案 1 :(得分:1)

函数f1不会返回你想到的类型(int * int)但是返回int:

# let f1 (p1, p2, p3, p4) = if true then p1+1 else p4+1;;
val f1 : int * 'a * 'b * int -> int = <fun>

例如,如果你有:

let f1 (p1, p2, p3, p4) = (p1+1,p2+1);;
let f2 (p1, p2, p3, p4) = (p1+1,p2+1);;
let f3 (p1, p2, p3, p4) = (p1+1,p3+1);;
let f4 (p1, p2, p3, p4) = (p1+1,p4+1);;

您可以无误地定义功能测试:

   # let test(p1, p2, p3, p4) = (f1(p1, p2, p3, p4), f2(p1, p2, p3, p4), f3(p1, p2, p3, p4), f4(p1, p2, p3, p4));;
val test :
  int * int * int * int ->
  (int * int) * (int * int) * (int * int) * (int * int) = <fun>

你也可以写:

let test nuplet = (f1 nuplet, f2 nuplet, f3 nuplet, f4 nuplet);;

答案 2 :(得分:0)

在功能定义结束时出现了缺少分号(第二个)的情况。这对我来说是一个愚蠢的问题。遗憾