約==
和!=
快速解釋的唯一類型在OCaml中,除了已經提供的所有正確答案外:
1/==
和!=
公開您實際上不想知道的實現細節。例如:
# let x = Some [] ;;
val x : 'a list option = Some []
# let t = Array.create 1 x ;;
val t : '_a list option array = [|Some []|]
# x == t.(0) ;;
- : bool = true
到目前爲止,那麼好:x
和t.(0)
在物理上是相同的,因爲t.(0)
包含一個指向相同的塊x
指向。這是實施的基本知識所要求的。但是:
# let x = 1.125 ;;
val x : float = 1.125
# let t = Array.create 1 x ;;
val t : float array = [|1.125|]
# x == t.(0) ;;
- : bool = false
你在這裏看到的是一個涉及浮點數的有用優化結果。
2 /另一方面,有一種安全的方式來使用==
,這是一個快速但不完整的方法來檢查結構的平等。
如果在二叉樹
let equal t1 t2 =
match ...
檢查t1
和t2
物理平等寫一個平等的功能是一個快速的方法來檢測他們顯然結構相同,甚至無需遞歸和閱讀。那就是:
let equal t1 t2 =
if t1 == t2
then true
else
match ...
如果你記住,OCaml中的「布爾或」運算符是「懶」,
let equal t1 t1 =
(t1 == t2) ||
match ...
+1你是最快的... :) – LB40 2009-09-11 19:10:28