Functional programming OCaml重新定义中缀运算符

Functional programming OCaml重新定义中缀运算符,functional-programming,ocaml,infix-notation,Functional Programming,Ocaml,Infix Notation,练习问题要求解释为什么这不起作用。显然,从运行代码中,我看到它没有,但在本例中,我看不出原因。这个错误并不能说明什么 # 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. 谢谢 让我们一步一步走。激发一个REPL并键入: # let (+) x y z = x + y + z;; val ( + )

练习问题要求解释为什么这不起作用。显然,从运行代码中,我看到它没有,但在本例中,我看不出原因。这个错误并不能说明什么

# 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.

谢谢

让我们一步一步走。激发一个REPL并键入:

# let (+) x y z = x + y + z;;
val ( + ) : int -> int -> int -> int = <fun>
这是您计划工作的每一步。
您的代码的问题是,这不起作用:

# 5+6 7;;
Error: This expression has type int
   This is not a function; it cannot be applied.
这是因为函数应用程序的优先级高于
+
运算符。(事实上,函数应用程序在OCaml中具有最强的优先级。)因此,添加括号可以修复它(您需要重新启动顶层):


让我们一步一步走。激发一个REPL并键入:

# let (+) x y z = x + y + z;;
val ( + ) : int -> int -> int -> int = <fun>
这是您计划工作的每一步。
您的代码的问题是,这不起作用:

# 5+6 7;;
Error: This expression has type int
   This is not a function; it cannot be applied.
这是因为函数应用程序的优先级高于
+
运算符。(事实上,函数应用程序在OCaml中具有最强的优先级。)因此,添加括号可以修复它(您需要重新启动顶层):


所以int->int->int->int可以读作输入:int->int,输出:int->int,或者(int->int)->(int->int)?也就是说,它的输入是一个int类型的函数?不
int->int->int->int
表示
int->(int->(int->int))
。而
(int->int)->(int->int)
表示接受
int->int
函数并返回
int->int
函数Thank you@Kostya,这是针对一个根本性的误解,即签名值是右关联的。因此int->int->int->int可以作为输入:int->int和输出:int->int,或者(int->int)->(int->int)?也就是说,它的输入是一个int类型的函数?不
int->int->int->int
表示
int->(int->(int->int))
。虽然
(int->int)->(int->int)
表示接受
int->int
函数并返回
int->int
函数Thank you@Kostya的函数,但这是一个根本性的误解,即签名值是正确关联的。