我在学。这是我觉得奇怪的事情:
let test_treeways x = match x with
| _ when x < 0 -> -1
| _ when x > 0 -> 1
| _ -> 0;;
如果我这样称呼它:
test_threeways -10;;
我会得到类型不匹配错误(因为据我所知,它将一元减号解释为部分函数应用程序,因此它认为表达式的类型是int -> int
。然而,这:
test_threeways (-10);;
按预期行事(尽管这实际上计算了值,据我所知,它不会将常量“负十”传递给函数。
那么,如何在 OCaml 中编写常负数呢?
您需要将其括起来以避免解析歧义。 “test Threeways -10”也可能意味着:从 test_ Threeways 中减去 10。
并且不涉及任何功能应用。只需重新定义一元减号即可查看差异:
#let (~-) = (+) 2 ;; (* See documentation of pervarsives *)
val ( ~- ) : int -> int = <fun>
# let t = -2 ;;
val t : int = -2 (* no function application, constant negative number *)
# -t ;;
- : int = 0 (* function application *)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)