我定义了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给我一个语法错误,它并没有真正告诉我任何事情。
答案 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)
在功能定义结束时出现了缺少分号(第二个)的情况。这对我来说是一个愚蠢的问题。遗憾