* Bug in equality testing?
@ 1994-03-20 15:24 John Harrison
1994-03-21 16:36 ` Vale'rie Me'nissier-Morain
1994-03-21 23:46 ` Xavier Leroy
0 siblings, 2 replies; 3+ messages in thread
From: John Harrison @ 1994-03-20 15:24 UTC (permalink / raw)
To: caml-list; +Cc: John.Harrison
Hi,
I've come across the following, which unless I am being stupid
looks like a bug. The program below produces (in 0.6):
true; true; false
John.
P.S. Thanks for the interesting replies on hash-consing. I'm afraid
I am likely to be pestering you with more questions about CAML soon.
It's a great system!
**********************************************
type Example = Var of string
| App of string * Example list;;
let DEST =
fun (App p) -> p
| (Var _) -> failwith "DEST";;
let a = DEST(App("X",([]: Example list)));;
let b = ("X",([]: Example list));;
fst(a) = fst(b);;
snd(a) = snd(b);;
a = b;;
**********************************************
^ permalink raw reply [flat|nested] 3+ messages in thread* Bug in equality testing? 1994-03-20 15:24 Bug in equality testing? John Harrison @ 1994-03-21 16:36 ` Vale'rie Me'nissier-Morain 1994-03-21 23:46 ` Xavier Leroy 1 sibling, 0 replies; 3+ messages in thread From: Vale'rie Me'nissier-Morain @ 1994-03-21 16:36 UTC (permalink / raw) To: caml-list It is a well-known bug of the compilation of Caml Light. In fact, the variables a and b are internally represented as: ----- ---- ---- ------ ---- ---- | App | | | and | Pair | | | ----- -/-- --\- ------ -/-- --\- / \ / \ "X" [] "X" [] so the generic equality says these 3-tuples are not equal since their headers are not the same! Valerie Menissier-Morain ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Bug in equality testing? 1994-03-20 15:24 Bug in equality testing? John Harrison 1994-03-21 16:36 ` Vale'rie Me'nissier-Morain @ 1994-03-21 23:46 ` Xavier Leroy 1 sibling, 0 replies; 3+ messages in thread From: Xavier Leroy @ 1994-03-21 23:46 UTC (permalink / raw) To: John Harrison; +Cc: caml-list > I've come across the following, which unless I am being stupid > looks like a bug. Yes, this is described as bug (1) in the file KNOWN-BUGS in the 0.6 distribution. A simple workaround is to change the definition of the DEST function: instead of let DEST = fun (App p) -> p | (Var _) -> failwith "DEST";; write let DEST = fun (App(x,y)) -> (x,y) | (Var _) -> failwith "DEST";; Regards, - Xavier Leroy ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~1994-03-22 10:16 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 1994-03-20 15:24 Bug in equality testing? John Harrison 1994-03-21 16:36 ` Vale'rie Me'nissier-Morain 1994-03-21 23:46 ` Xavier Leroy
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox