Pattern Matching

Ernesto Posse (e-posse@isis.uniandes.edu.co)
Thu, 05 Sep 1996 12:19:05 -0500

Date: Thu, 05 Sep 1996 12:19:05 -0500
From: Ernesto Posse <e-posse@isis.uniandes.edu.co>
To: Caml List <caml-list@pauillac.inria.fr>
Subject: Pattern Matching

Hello everyone.

I have a question about pattern matching. I need a function which
binds an identifier to a value in certain data structure (which is
called "heap" here). This is actually a (string * record) list. It is
not suppose to be a mutable data structure, so the binding just creates
a
new list copying the same values as the old one with the exception of
the
record to be changed. For this purpose I am using List.map (I am using
O'Caml 1.01 for Windows 95):

let assign heap id obj =
List.map
( function
(id,{ vartype = vt; contents = v;
constraints = c; dependencies = d }) ->
(id,{ vartype = vt; contents = obj;
constraints = c; dependencies = d })
| r -> r ) (* 1 *)
heap

However the compiler tells me that line marked (* 1 *) is an unused case
of the match expression. I thought that maybe the problem was that the
inner id variables (the ones in the function passed to map) are
identifier
patterns therefor they are different from the parameter of the assign
function. So I tried to fix it like this:

let assign heap id obj =
List.map
( function
(name,{ vartype = vt; contents = v;
constraints = c; dependencies = d })
when name = id ->
(name,{ vartype = vt; contents = obj;
constraints = c; dependencies = d })
| (name,_) as r when name <> id -> r )
heap

And now I get the warning "this pattern-matching is not exhaustive".

Can anyone tell me what is wrong with this possibilities and how could
I solve the problem ?

Thank you very much.

-- 
Ernesto Posse
Estudiante de Ingenieria de Sistemas y Computacion
(Systems and Computing Engineering student)
Universidad de los Andes
Santafe de Bogota
Colombia
e-mail: e-posse@uniandes.edu.co