Hi all,
thanks a lot for your help in this travel through OCaML but I have still
a question. I have tried to write a polymorphic stack code attached but
I don't understand its behavior:
# open Stack;;
# let s = empty;;
val s : '_a Stack.stack = {c = []}
# push s 7;;
- : unit = ()
# push s 25;;
- : unit = ()
# let s1 = empty;;
val s1 : int Stack.stack = {c = [25; 7]}
# push s1 "Hello";;
Error: This expression has type string but an expression was expected of type
int
Apparently seems that I can have only a variable of type stack and any
other call to its constructor links the new variable to the old one.
This means that once I have put an int inside I can't have a second
stack for characters or what else? This behavior is completely
unexpected and I can't explain it.
I'm sure I'm doing something wrong but I can't say what it is. Do you
have any idea about?
TIA
Walter
--
--
Caml-list mailing list. Subscription management and archives:
https://sympa-roc.inria.fr/wws/info/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs
module Stack = struct
type 'a stack = { mutable c : 'a list }
exception EmptyStackException
let empty = { c = [] }
let push s x = s.c <- x :: s.c
let pop s =
match s.c with
hd::tl -> s.c <- tl
| [] -> raise EmptyStackException
let top s =
match s.c with
hd::_ -> hd
| [] -> raise EmptyStackException
let is_empty s = (s.c = [])
end;;