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的函数,但这是一个根本性的误解,即签名值是正确关联的。