我们可以在不使用二进制操作的情况下找到OCaml中的符号吗?我的意思是,通过与0比较可以很容易地得到符号。除了使用与命令匹配之外,还有其他方法吗?我试过以下查找OCaml中整数的符号
let sign n =
let k = abs(n) in
match k with
| 0 -> 0
| n -> 1
| _ -> (-1);;
但它不适用于负面的,因为它表明最后的比较是未使用的。 :/
我们可以在不使用二进制操作的情况下找到OCaml中的符号吗?我的意思是,通过与0比较可以很容易地得到符号。除了使用与命令匹配之外,还有其他方法吗?我试过以下查找OCaml中整数的符号
let sign n =
let k = abs(n) in
match k with
| 0 -> 0
| n -> 1
| _ -> (-1);;
但它不适用于负面的,因为它表明最后的比较是未使用的。 :/
如果你想使用模式匹配,你可以尝试:
let sign n =
match n with
| 0 -> 0
| _ -> (n/abs(n));
这为0返回0,-1底片,和+1阳性
与模式n
的模式匹配不会将该值与现有变量n
的值进行比较。它绑定->
块中的新变量n
。旧变量n
继续存在并保持其值,但通过该名称暂时无法访问。
因此,match … with n -> …
总是成功,因为对于新变量n
,任何表达式的格式为n
。
match
构造不适用于识别整数的符号。你只会写if n > 0 then 1 else if n < 0 then -1 else 0
会更好。
你的模式匹配招不工作模式| n ->
不会将您的值与n进行比较,而是创建一个绑定到k的新n。
一个简单的解决方法是使用compare
函数。它不是这样规定的,但实际上是这样工作的:
let sign n = compare 0 n;;
谢谢!那工作....... :) :) –