意外的字符串相等结果

Unexpected string equality results

提问人:normidar 提问时间:12/1/2022 最后编辑:Chrisnormidar 更新时间:12/7/2022 访问量:68

问:

我有一些 OCaml 代码:

let (&>) : ('x -> 'y) -> ('y -> 'z) -> ('x -> 'z) =
   fun g f x -> x |> g |> f

let soi x = string_of_int x
let sof x = string_of_float x
let fos x = float_of_string x
let ios x = int_of_string x

let clear_int = ios &> soi

let is_int_clear (x: string) = 
  let targ = clear_int x in
  let _ = print_endline x in
  let _ = print_endline targ in
  x == targ

let ccc = is_int_clear "123"

let scc = if ccc then "succ" else "fail"

let () = print_endline scc

我认为应该等于但输出这个:"123""123"

123
123
fail

"123"是不平等的."123"

为什么以及如何解决它?

OCAML 平等

评论

0赞 Chris 12/1/2022
风格说明:当你在这个例子中对函数进行别名化时,像这样的例子可能是机智的,但即便如此,这是否有帮助,或者实际上只是让你的代码稍微更难理解也是值得怀疑的。let soi x = string_of_int xlet soi = string_of_int

答:

0赞 Chris 12/7/2022 #1

你的逻辑中的错误在于使用哪些测试来衡量身体平等。这是检查两个字符串是否驻留在内存中的同一位置。==

您希望使用哪些检验来检验结构相等性:两个值是否包含相同的信息。=

更改非常简单

let is_int_clear (x: string) = 
  let targ = clear_int x in
  let _ = print_endline x in
  let _ = print_endline targ in
  x = targ