Version française
Home     About     Download     Resources     Contact us    
Browse thread
Beginner's question.
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: maranget@y...
Subject: Re: [Caml-list] Beginner's question.
> Hello.
> 
> I'm making my first steps in OCaml and trying (just for expirience) to
> implement a simple function which applies given function to all elements
> of given list.
> I successfully did it using if/then/else
> 
> let rec map func lst =
>         if lst = [] then []
>         else (func (List.hd lst)) :: (map func (List.tl lst))
> ;;
> 
> But I can't do it using pattern matching -- following function doesn't
> work
> 
> let rec mapm func lst = function
>         | ( _, [] ) -> []
>         | ( _, head::tail ) -> (func head) :: (mapm func tail)
> ;;
> 
> I get type mismatch error: characters 39-55:
> This expression has type 'a * 'b list -> 'c list but is here used with
> type  'c list
> 
> But wait, ``map func (List.tl lst)''  in first example has the same
> type, isn't it?
> Both right parts in first and second example are, say, transformers from
> a tuple ( something, list-of-something-else ) to list-of-something-else.
> 

Basically no, your function is defined as taking three arguments
func, lst and one anonymous argument to be matched,
where, in fact, you want to match over 'lst'.


I sugest that, to begin with caml, you stick to explict
match constructs, avoiding matchings introduced by function

 let rec mapm func lst = match lst with
         | [] -> []
         | head::tail -> (func head) :: (mapm func tail)
 ;;


Oh well, and with function :

let rec mapm func = function 
         | [] -> []
         | head::tail -> (func head) :: (mapm func tail)
 ;;
> 
> 
> 
> -- 
> Best regards,
> Alexander A. Vlasov.
> 
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs

-- 
Luc Maranget