练习题要求解释为什么这不起作用。显然,从运行代码我发现它没有,但在这种情况下我没有看到为什么。这个错误并没有太多说明!
# let (+) x y z = x + y + z in 5 + 6 7;;
Error: This expression has type int
This is not a function; it cannot be applied.
谢谢!
答案 0 :(得分:4)
让我们一步一步走。触发REPL并输入:
# let (+) x y z = x + y + z;;
val ( + ) : int -> int -> int -> int = <fun>
我们可以将此int -> int -> int -> int
解释为一个中缀+
运算符,该运算符需要两个int
并返回一个int -> int
函数。
让我们检查:
# let f = 5+6;;
val f : int -> int = <fun>
# f 7;;
- : int = 18
这是您预期计划的每一步工作 您的代码的问题是这不起作用:
# 5+6 7;;
Error: This expression has type int
This is not a function; it cannot be applied.
这是因为函数应用程序优先于+
运算符。 (实际上,函数应用程序在OCaml中具有最强的优先级。)因此添加括号,修复它(您需要重新启动顶层):
# let (+) x y z = x + y + z in (5+6) 7;;
- : int = 18