我正在尝试在Ocaml中创建一个函数列表,但我一直在收到警告。知道为什么吗?
让f = [fun x - > -x;有趣的x - > x + 2;有趣的x - > X * X]
答案 0 :(得分:10)
分号也用于结束用于副作用的功能。当这些函数的返回类型不是unit
时(这种情况下为int
),会出现警告;它们只是警告,因为你可能只打算使用副作用,通常这是一个错误。这是暂且的,但要以编程方式和安全地使用ignore
函数来抑制这些警告,如ignore (x+2);
中那样。
回到你的问题,在其中(并将分号扩展到它们的等价;并修改每个函数的变量)你实际上在写,
(fun x ->
let _ = -x in
(fun y ->
let _ = y+2 in
(fun z -> z*z)))
或者,另一个例子,如汽油指出,
(fun x ->
-x;
(fun y ->
y+2;
(fun z -> z*z)))
您可以从返回的类型(int -> int -> int -> int) list
判断出您的意图会立即出现问题。您需要在每个周围添加括号,例如(fun x -> x+2);
以实际创建列表。