-----------
type card_kind = Ace | King | Queen | Jack | Number of int;; (* I know
I can consildate these types.. still learning *)
type card_suit = Club | Diamond | Heart | Spade | Nothing;;
type card = { card: card_kind; suit: card_suit };;
exception Failure;;
let deck = [|
{ card= Ace; suit= Spade },
{ card= Queen; suit= Heart }
|];;
(* Shuffle *)
let shuffle l =
match l with
[||] -> raise Failure
| l -> for x=0 to 100 do
let rand_a = Random.int 2 in
let rand_b = Random.int 2 in
let tmp = l.(rand_a) in
print_int(x);
try
l.(rand_a) <- l.(rand_b);
with Invalid_argument "index out of bounds" -> assert false
| exn -> ();
try
l.(rand_b) <- tmp;
with Invalid_argument "index out of bounds" -> assert false
| exn -> ();
done;
l;
;;
shuffle deck
-----------
With out try:
Fatal error: exception Invalid_argument("index out of bounds")
With try:
File "sortrand2.ml", line 31, characters 55-67:
Fatal error: exception Assert_failure("sortrand2.ml", 24, 55)
If I don't match exn I get this warning:
Warning X: this statement never returns (or has an unsound type.)
Compiling with:
OCAMLRUNPARAM=b ocamlc -g sortrand2.ml -o sortrand2; ./sortrand2
Version:
The Objective Caml toplevel, version 3.09.2
Operating System:
OSX 10.4.x (intel)
A related thread/post:
http://alan.petitepomme.net/cwn/2006.03.07.html#6
http://groups.google.com/group/fa.caml/browse_frm/thread/190ec2f3c3dbac80/a32ea5687ea4a9c0#a32ea5687ea4a9c0
-----------
Hopefully this a common newbie mistake or you can advise me on a better
approach to randomly sort an array...
Clayton
Change the comma to a Ocaml's list separator, a semicolon, and it
should work fine.
tim